«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Обработка автоматизированных заявок Jira для новых открытий схемы EventBridge

Обработка автоматизированных заявок Jira для новых открытий схемы EventBridge

Опубликовано 8 ноября 2024 г.
Просматривать:942

Позвольте мне начать с самого начала. В моей должности облачного инженера AWS у одного из моих предыдущих клиентов использовалась архитектура, управляемая событиями, при которой третьи стороны постоянно отправляли множество событий в нашу среду AWS через EventBridge. Для каждой третьей стороны мы предоставили шину событий с различными правилами EventBridge.

Задачей здесь было отслеживать структуру мероприятия — то, как оно было организовано. События часто обновлялись, что приводило к множеству встреч для разъяснения ситуации.

В конце 2019 года большая часть нашей проблемы была решена благодаря обнаружению схемы EventBridge. Включив это на шинах событий, схемы автоматически генерировались на основе полученных событий. Это позволило нам генерировать привязки кода из этих схем, что очень помогло в нашей объектно-ориентированной среде.

Ниже вы можете увидеть простой пример стороннего события.

{
  "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 Toolkit для 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. Проверьте README.

Первым шагом было создание правила EventBridge на нашей шине по умолчанию, которое срабатывало бы при обнаружении новой схемы или обновления версии схемы. Затем это событие было отправлено в очередь SQS, чтобы служить входными данными для канала EventBridge. Здесь мы могли бы добавить дополнительную фильтрацию (необязательно в этом примере) и обогатить наше событие с помощью функции 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 автоматизацию SSM 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 расширено и выглядит следующим образом.

[
  {
    "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, его также можно включить в заявку. Таким образом, вы можете напрямую упомянуть новые атрибуты или изменения в схеме в своем запросе.

Это решение также будет срабатывать при обнаружении совершенно нового события, поскольку оно создаст версию 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