"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > التعامل مع تذاكر Jira الآلية لاكتشافات مخطط EventBridge الجديدة

التعامل مع تذاكر Jira الآلية لاكتشافات مخطط EventBridge الجديدة

تم النشر بتاريخ 2024-11-08
تصفح:159

اسمحوا لي أن أبدأ من البداية. في دوري كمهندس سحابة AWS لدى أحد عملائي السابقين، تم استخدام بنية تعتمد على الأحداث حيث كانت الجهات الخارجية ترسل باستمرار العديد من الأحداث إلى بيئة AWS الخاصة بنا عبر EventBridge. لكل طرف ثالث، قمنا بتوفير حافلة أحداث بقواعد EventBridge المتنوعة.

كان التحدي هنا هو تتبع بنية الحدث، وكيفية تنظيمه. تم تحديث الأحداث بشكل متكرر، مما أدى إلى العديد من الاجتماعات لتوضيح الأمور.

في نهاية عام 2019، تم حل جزء كبير من مشكلتنا بفضل EventBridge Schema Discovery. من خلال تمكين هذا في حافلات الأحداث، تم إنشاء المخططات تلقائيًا بناءً على الأحداث المستلمة. سمح لنا هذا بإنشاء روابط تعليمات برمجية من هذه المخططات، والتي كانت بمثابة مساعدة كبيرة في بيئتنا الموجهة للكائنات.

يمكنك أن ترى أدناه نموذجًا أساسيًا جدًا لحدث لطرف ثالث.

{
  "version": "0",
  "id": "ef21d5fc-a5ba-e2c6-fc4b-a8807455c64d",
  "detail-type": "orderType",
  "source": "com.company.A",
  "account": "xxx",
  "time": "2024-08-22T08:04:26Z",
  "region": "eu-west-1",
  "resources": [],
  "detail": {
    "orderId": 123456789,
    "customer": {
      "customerId": "C001",
      "name": "John Doe"
    },
    "orderDate": "2024-08-22"
  }
}

اكتشفت AWS مخططًا لهذه الأنواع من الأحداث:

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

باستخدام مجموعة أدوات AWS لـ Visual Studio Code، يمكننا بسهولة تمثيل أحداثنا ككائنات مكتوبة بقوة في التعليمات البرمجية الخاصة بنا.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

فيما يلي مثال أساسي جدًا حول كيفية استخدامنا لربط التعليمات البرمجية.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

الإخراج:

123456789
C001

أدى هذا إلى تحسين طريقة عملنا، ولكننا لا نزال نواجه مشكلة. من وقت لآخر، تضيف الأطراف الثالثة سمات جديدة إلى أحداثها. سيكتشف EventBridge هذه التغييرات، لكن المطورين غالبًا ما ينسون تحديث روابط التعليمات البرمجية للمخطط الجديد. على الرغم من أن تنفيذنا كان قويًا بما يكفي لمنع حدوث أعطال عند إضافة سمات جديدة، إلا أنه أدى إلى بيانات جديدة لم نكن نستخدمها. كان علينا الاعتماد على المطورين ليتذكروا تحديث روابط التعليمات البرمجية الخاصة بهم من حين لآخر، ولم تكن هناك عملية واضحة لإدارة ذلك.

في بعض الأحيان، لا يتم تحديث رابط التعليمات البرمجية لعدة أشهر، وأحيانًا، يقوم مطوران بتحديثه في وقت واحد، مما يؤدي إلى تعارضات أو عمل مكرر.

للتعامل مع هذا الأمر بشكل أفضل، قررنا إنشاء حل يقوم تلقائيًا بإنشاء تذكرة Jira عندما يقوم طرف ثالث بتحديث الحدث الخاص به ويتم اكتشاف مخطط جديد.

الحل متاح في CloudFormation على GitHub الخاص بي. تحقق من الملف التمهيدي.

كانت الخطوة الأولى هي إنشاء قاعدة EventBridge على الناقل الافتراضي لدينا والتي سيتم تشغيلها عند اكتشاف مخطط جديد أو تحديث إصدار المخطط. تم بعد ذلك إرسال هذا الحدث إلى قائمة انتظار SQS ليكون بمثابة إدخال لـ EventBridge Pipe. هنا، يمكننا إضافة تصفية إضافية (اختيارية في هذا المثال) وإثراء حدثنا باستخدام وظيفة Lambda.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

للإثراء، استخدمنا مخطط الوصف باستخدام boto3.

data = event[0]["input"]["detail"]

try:
    response = client.describe_schema(
        RegistryName=data["RegistryName"],
        SchemaName=data["SchemaName"],
        SchemaVersion=data["Version"],
    )
except ClientError as e:
    raise e

return_data = {
    "SchemaName": response["SchemaName"],
    "SchemaVersion": response["SchemaVersion"],
    "SchemaArn": response["SchemaArn"],
    "Content": json.loads(response["Content"]),
}

بعد إثراء بياناتنا، أرسلناها إلى سير عمل Step Function. أدى سير العمل هذا بدوره إلى تشغيل AWS-CreateJiraIssue SSM Automation الذي توفره AWS، والذي قام تلقائيًا بإنشاء تذكرة Jira.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

تضمنت التذكرة تفاصيل مثل اسم المخطط وإصدار المخطط الجديد وARN الخاص بالمخطط. (يمكن أيضًا إضافة محتوى إضافي من الحدث إذا لزم الأمر.)

 ----------------        --------        -------------------------        ----------------        ------------------------- 
| EventBridge    | ---> | SQS    | ---> | EventBridge Pipe        | ---> | Step Function  | ---> | SSM Automation Document |
| Rule           |      |        |      | (Filtering & Enrichment)|      |                |      |                         |
 ----------------        --------        -------------------------        ----------------        ------------------------- 

فلنعرض هذا الحل. هنا ترى حدثًا محدثًا، استنادًا إلى الحدث الأصلي. حالة السمة جديدة.

{
  "version": "0",
  "id": "dffbd38b-9258-d028-21f3-da0ba3c9e314",
  "detail-type": "orderType",
  "source": "com.company.A",
  "account": "xxx",
  "time": "2024-08-22T08:04:26Z",
  "region": "eu-west-1",
  "resources": [],
  "detail": {
    "orderId": 123456789,
    "status": "Completed",
    "customer": {
      "customerId": "C001",
      "name": "John Doe"
    },
    "orderDate": "2024-08-22"
  }
}

سيتم اكتشاف مخطط جديد. سيؤدي هذا إلى تشغيل الحل بأكمله. بعد أن يقوم Lambda بإثراء حدثنا، سيتم استخدام هذا الحدث المحدث كمدخل لوظيفة الخطوة الخاصة بنا.

تم إثراء حدث الإدخال لوظيفة الخطوة الخاصة بنا ويبدو بهذا الشكل.

[
  {
    "statusCode": 200,
    "data": {
      "SchemaName": "com.company.A@OrderType",
      "SchemaVersion": "2",
      "SchemaArn": "arn:aws:schemas:eu-west-1:xxx:schema/discovered-schemas/com.company.A@OrderType",
      "Content": {
        "openapi": "3.0.0",
        "info": {
          "version": "1.0.0",
          "title": "OrderType"
        },
        "paths": {},
        "components": {
          "schemas": {
            "AWSEvent": {
              "type": "object",
              "required": [
                "detail-type",
                "resources",
                "detail",
                "id",
                "source",
                "time",
                "region",
                "version",
                "account"
              ],
              "x-amazon-events-detail-type": "orderType",
              "x-amazon-events-source": "com.company.A",
              "properties": {
                "detail": {
                  "$ref": "#/components/schemas/OrderType"
                },
                "account": {
                  "type": "string"
                },
                "detail-type": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "resources": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "source": {
                  "type": "string"
                },
                "time": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "string"
                }
              }
            },
            "OrderType": {
              "type": "object",
              "required": [
                "orderId",
                "orderDate",
                "customer",
                "status"
              ],
              "properties": {
                "customer": {
                  "$ref": "#/components/schemas/Customer"
                },
                "orderDate": {
                  "type": "string",
                  "format": "date"
                },
                "orderId": {
                  "type": "number"
                },
                "status": {
                  "type": "string"
                }
              }
            },
            "Customer": {
              "type": "object",
              "required": [
                "customerId",
                "name"
              ],
              "properties": {
                "customerId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
]

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

سيؤدي سير عمل Step Function بدوره إلى تشغيل أتمتة SSM وإنشاء تذكرة Jira.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

للتيسير، احتفظت بمحتوى التذكرة بشكل موجز. ومع ذلك، نظرًا لأنه يتم أيضًا إرسال المحتوى كمدخل إلى وظيفة الخطوة، فمن الممكن أيضًا تضمينه في التذكرة. وبهذه الطريقة، يمكنك ذكر السمات الجديدة أو التغييرات التي تم إجراؤها على المخطط في تذكرتك مباشرةً.

سيتم تشغيل هذا الحل أيضًا عند اكتشاف حدث جديد تمامًا، حيث سيؤدي إلى إنشاء الإصدار 1 من الحدث الجديد، مما يتسبب في تنشيط قاعدة EventBridge.

بهذه الطريقة، تم إبلاغنا بالتحديثات ويمكننا جدولتها في سباقنا السريع. وهذا يؤدي إلى تسريع دورة التطوير لدينا.

أدرك أن هذه حالة محددة تمامًا، ولكن يمكن إنشاء حلول مماثلة عن طريق إعداد قواعد EventBridge لتشغيل الأحداث المطلوبة، ثم استخدام وظائف الإثراء والخطوة مع SSM لإنشاء المزيد من عمليات التشغيل الآلي.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/aws-builders/handling-automated-jira-tickets-for-new-eventbridge-schema-discoveries-3i9n?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3