„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Umgang mit automatisierten Jira-Tickets für neue EventBridge-Schema-Entdeckungen

Umgang mit automatisierten Jira-Tickets für neue EventBridge-Schema-Entdeckungen

Veröffentlicht am 08.11.2024
Durchsuche:890

Lassen Sie mich am Anfang beginnen. In meiner Rolle als AWS Cloud Engineer bei einem meiner früheren Kunden kam eine ereignisgesteuerte Architektur zum Einsatz, bei der Dritte ständig viele Ereignisse über EventBridge an unsere AWS-Umgebung sendeten. Für jeden Dritten stellten wir einen Eventbus mit verschiedenen EventBridge-Regeln zur Verfügung.

Die Herausforderung bestand darin, den Überblick über die Veranstaltungsstruktur zu behalten – wie sie organisiert war. Die Veranstaltungen wurden häufig aktualisiert, was zu vielen Besprechungen zur Klärung der Dinge führte.

Ende 2019 wurde ein großer Teil unseres Problems dank EventBridge Schema Discovery gelöst. Durch die Aktivierung dieser Funktion auf den Ereignisbussen wurden automatisch Schemata basierend auf den empfangenen Ereignissen generiert. Dadurch konnten wir Codebindungen aus diesen Schemata generieren, was in unserer objektorientierten Umgebung eine große Hilfe war.

Unten sehen Sie ein sehr einfaches Beispielereignis eines Drittanbieters.

{
  "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 hat ein Schema für diese Art von Ereignissen entdeckt:

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Durch die Verwendung des AWS Toolkit for Visual Studio Code konnten wir unsere Ereignisse problemlos als stark typisierte Objekte in unserem Code darstellen.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Unten finden Sie ein sehr einfaches Beispiel dafür, wie wir die Codebindungen verwendet haben.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Ausgabe:

123456789
C001

Dies hat unsere Arbeitsweise verbessert, aber wir sind immer noch auf ein Problem gestoßen. Von Zeit zu Zeit fügten Dritte ihren Veranstaltungen neue Attribute hinzu. EventBridge entdeckte diese Änderungen, aber Entwickler vergaßen oft, die Codebindungen für das neue Schema zu aktualisieren. Obwohl unsere Implementierung robust genug war, um Fehler beim Hinzufügen neuer Attribute zu verhindern, führte sie zu neuen Daten, die wir nicht nutzten. Wir mussten uns darauf verlassen, dass die Entwickler daran denken, ihre Codebindungen gelegentlich zu aktualisieren, und es gab keinen klaren Prozess, um dies zu verwalten.

Manchmal wurde eine Codebindung monatelang nicht aktualisiert, und gelegentlich aktualisierten zwei Entwickler sie gleichzeitig, was zu Konflikten oder doppelter Arbeit führte.

Um dies besser zu bewältigen, haben wir uns entschieden, eine Lösung zu entwickeln, die automatisch ein Jira-Ticket erstellt, wenn ein Dritter seine Veranstaltung aktualisiert und ein neues Schema entdeckt wird.

Die Lösung ist in CloudFormation auf meinem GitHub verfügbar. Lesen Sie die README-Datei.

Der erste Schritt bestand darin, eine EventBridge-Regel auf unserem Standardbus zu erstellen, die immer dann ausgelöst wird, wenn ein neues Schema oder eine Schemaversionsaktualisierung entdeckt wird. Dieses Ereignis wurde dann an eine SQS-Warteschlange gesendet, um als Eingabe für eine EventBridge-Pipe zu dienen. Hier könnten wir zusätzliche Filterung hinzufügen (in diesem Beispiel optional) und unser Event mit einer Lambda-Funktion anreichern.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Zur Anreicherung haben wir das beschreibende Schema mit boto3 verwendet.

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"]),
}

Nachdem wir unsere Daten angereichert hatten, schickten wir sie an einen Step-Function-Workflow. Dieser Workflow löste wiederum die von AWS bereitgestellte AWS-CreateJiraIssue SSM-Automatisierung aus, die automatisch ein Jira-Ticket erstellte.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Das Ticket enthielt Details wie den Schemanamen, die neue Schemaversion und den ARN des Schemas. (Bei Bedarf können auch zusätzliche Inhalte der Veranstaltung hinzugefügt werden.)

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

Lassen Sie uns diese Lösung vorführen. Hier sehen Sie eine aktualisierte Veranstaltung, basierend auf dem Original. Der Attributstatus ist neu.

{
  "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"
  }
}

Ein neues Schema wird entdeckt. Dadurch wird die gesamte Lösung ausgelöst. Nachdem das Lambda unser Ereignis bereichert hat, wird dieses aktualisierte Ereignis als Eingabe für unsere Schrittfunktion verwendet.

Das Eingabeereignis unserer Step-Funktion ist angereichert und sieht so aus.

[
  {
    "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

Der Step-Function-Workflow löst wiederum die SSM-Automatisierung aus und erstellt ein Jira-Ticket.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

Der Einfachheit halber habe ich den Inhalt des Tickets kurz gehalten. Da der Inhalt jedoch auch als Eingabe an die Step-Funktion gesendet wird, könnte er auch im Ticket enthalten sein. Auf diese Weise können Sie die neuen Attribute oder Änderungen am Schema direkt in Ihrem Ticket erwähnen.

Diese Lösung wird auch ausgelöst, wenn ein völlig neues Ereignis entdeckt wird, da dadurch eine Version 1 des neuen Ereignisses erstellt wird, wodurch die EventBridge-Regel ausgelöst wird.

Auf diese Weise wurden wir über Updates informiert und konnten diese in unseren Sprint einplanen. Dies führt zu einer Beschleunigung unseres Entwicklungszyklus.

Mir ist bewusst, dass dies ein ziemlich spezieller Fall ist, aber ähnliche Lösungen können erstellt werden, indem EventBridge-Regeln eingerichtet werden, die bei den gewünschten Ereignissen ausgelöst werden, und dann Anreicherungs- und Schrittfunktionen in Kombination mit SSM verwendet werden, um weitere Automatisierungen zu erstellen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/aws-builders/handling-automated-jira-tickets-for-new-eventbridge-schema-discoveries-3i9n?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3