"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 새로운 EventBridge 스키마 검색을 위한 자동화된 Jira 티켓 처리

새로운 EventBridge 스키마 검색을 위한 자동화된 Jira 티켓 처리

2024-11-08에 게시됨
검색:435

처음부터 시작하겠습니다. 이전 클라이언트 중 하나에서 AWS 클라우드 엔지니어로 일하면서 제3자가 EventBridge를 통해 AWS 환경에 지속적으로 많은 이벤트를 보내는 이벤트 기반 아키텍처가 사용되었습니다. 각 제3자에게 다양한 EventBridge 규칙이 포함된 이벤트 버스를 제공했습니다.

여기서 과제는 이벤트 구조, 즉 어떻게 구성되었는지 추적하는 것이었습니다. 이벤트가 자주 업데이트되어 상황을 명확히 하기 위해 많은 회의가 열렸습니다.

2019년 말, EventBridge Schema Discovery 덕분에 문제의 상당 부분이 해결되었습니다. 이벤트 버스에서 이를 활성화하면 수신된 이벤트를 기반으로 스키마가 자동으로 생성됩니다. 이를 통해 이러한 스키마에서 코드 바인딩을 생성할 수 있었으며 이는 객체 지향 환경에 큰 도움이 되었습니다.

아래에서는 제3자의 매우 기본적인 예제 이벤트를 볼 수 있습니다.

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

Visual Studio Code용 AWS 도구 키트를 사용하면 이벤트를 코드에서 강력한 형식의 객체로 쉽게 표현할 수 있습니다.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

다음은 코드 바인딩을 사용하는 방법에 대한 매우 기본적인 예입니다.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

산출:

123456789
C001

이를 통해 작업 방식이 개선되었지만 여전히 문제가 발생했습니다. 때때로 제3자가 이벤트에 새로운 속성을 추가합니다. EventBridge는 이러한 변경 사항을 발견했지만 개발자는 종종 새 스키마에 대한 코드 바인딩을 업데이트하는 것을 잊어버렸습니다. 우리의 구현은 새로운 속성이 추가될 때 손상을 방지할 만큼 강력했지만, 그 결과 우리가 활용하지 않는 새로운 데이터가 발생했습니다. 우리는 때때로 코드 바인딩을 업데이트하는 것을 기억하도록 개발자에게 의존해야 했고, 이를 관리하기 위한 명확한 프로세스가 마련되어 있지 않았습니다.

코드 바인딩이 몇 달 동안 업데이트되지 않은 경우도 있었고, 때로는 두 개발자가 동시에 업데이트하여 충돌이나 중복 작업이 발생하기도 했습니다.

이 문제를 더 잘 처리하기 위해 우리는 제3자가 이벤트를 업데이트하고 새로운 스키마가 발견될 때마다 자동으로 Jira 티켓을 생성하는 솔루션을 구축하기로 결정했습니다.

이 솔루션은 내 GitHub의 CloudFormation에서 사용할 수 있습니다. README를 확인하세요.

첫 번째 단계는 새 스키마 또는 스키마 버전 업데이트가 발견될 때마다 트리거되는 EventBridge 규칙을 기본 버스에 생성하는 것이었습니다. 그런 다음 이 이벤트는 EventBridge 파이프에 대한 입력 역할을 하기 위해 SQS 대기열로 전송되었습니다. 여기서 추가 필터링(이 예에서는 선택 사항)을 추가하고 Lambda 함수를 사용하여 이벤트를 강화할 수 있습니다.

Handling Automated Jira Tickets for New EventBridge Schema Discoveries

보강을 위해 boto3을 사용하여 explain_schema를 사용했습니다.

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에서 제공한 AWS-CreateJiraIssue SSM 자동화를 트리거하여 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가 이벤트를 강화한 후 업데이트된 이벤트가 Step Function의 입력으로 사용됩니다.

Step Function의 입력 이벤트는 강화되었으며 다음과 같습니다.

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

편의상 티켓 내용을 간략하게 작성했습니다. 그러나 콘텐츠도 Step Function에 대한 입력으로 전송되므로 티켓에 포함될 수도 있습니다. 이러한 방식으로 티켓에서 새로운 속성이나 스키마 변경 사항을 직접 언급할 수 있습니다.

이 솔루션은 완전히 새로운 이벤트가 발견된 경우에도 트리거됩니다. 새 이벤트의 버전 1을 생성하여 EventBridge 규칙이 실행되기 때문입니다.

이러한 방식으로 업데이트에 대한 정보를 얻었고 이를 스프린트에 예약할 수 있었습니다. 이로 인해 개발 주기가 가속화됩니다.

이것은 매우 구체적인 사례라는 것을 알고 있지만 EventBridge 규칙을 설정하여 원하는 이벤트에 대해 트리거한 다음 강화 및 Step Functions를 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