🤹♂️ AWS CDK 101 Projects — 🏄♂️ События CDK Stack/Resource/Drift пересылаются в крутые посты Slack — Event-Forwarder

Рад поделиться своим первым постом в качестве AWS Community Builder, прочитайте полностью и поделитесь своими мыслями.

🔰 Новички, которые только начинают работать с AWS CDK, пожалуйста, ознакомьтесь с моими предыдущими статьями в серии AWS CDK 101, которые дают представление о работе от начального до среднего уровня.

Если вы пропустили мою предыдущую статью, найдите ее по ссылкам ниже.

🔁 Оригинальный пост предыдущей серии на 🔗 Dev Post

🔁 Репост предыдущего поста 🔗 dev на @aravindvcyber

В этой новой серии статей мы поговорим о новых продвинутых бессерверных проектах, построенных на AWS CDK с использованием typescript.

Это также будет моя первая серия в качестве AWS Community Builder в категории инструментов для разработчиков.

Без лишних слов, позвольте мне начать брифинг об этом первом проекте, который я просто выложил в открытый доступ для этого потрясающего сообщества aws, как возможность сотрудничать и совершенствовать этот инструмент, который я только начал изучать, играя в облачные решения.

Ожидания 🏗️

Это решение, которое, как мне кажется, может помочь не только разработчикам, но и их коллегам, а также руководителям, операторам и архитекторам отслеживать развертывание решений Cloud formation в облаке AWS, контролировать и отслеживать любые изменения, постоянно используя каналы slack, и да, в будущем управлять действиями и обсуждениями из сообщений, чтобы иметь бесшовный опыт разработчика в мультирегиональных и кросс-аккаунт развертываниях.

Это может очень помочь разработчику/команде контролировать развертывания как личных, так и организационных учетных записей с меньшими затратами.

Начиная с событий Cloudformation, можно без особых усилий отправлять уведомления в Slack из разных регионов и даже из разных учетных записей, чтобы никогда не пропустить развертывания aws cloudformation в стеках и ресурсах, инициированные вашими коллегами/ci, а также уведомлять о событиях дрейфа.

Архитектура вкратце 🏗️

Основой этого стека является новая функция, выпущенная для доступности событий формирования облака в шине по умолчанию в AWS Eventbridge.

Эти события бывают трех типов.

  • События на уровне стека
  • События на уровне ресурсов
  • События обнаружения дрейфа

Этот проектный стек состоит из трех компонентов, как описано ниже.

Необходимые условия 🏗️

1) Как минимум один регион, где можно развернуть cdk с необходимыми привилегиями для запуска ресурсов, таких как лямбда, sqs, правила eventbridge и цели с доступом к cloudwatch и xray.

Используйте преимущества бесплатного уровня AWS для личного использования или запросите доступ к учетной записи песочницы в вашей организации, чтобы опробовать это.

1) Как минимум одно пользовательское Slack-приложение со сгенерированным и настроенным входящим webhook для отправки на необходимые каналы slack.

Хотите поэкспериментировать с созданием бесплатного рабочего пространства slack (рекомендуется), созданием приложения slack с входящим webhook или генерацией входящего webhook в приложении slack от администратора вашей организации? Есть несколько руководств, чтобы получить это, или свяжитесь со мной по DM для получения разъяснений.

Создайте приложение Slack

Настройка входящего вебхука

Репо проекта на GitHub 🎢

Я полностью поделился кодовой базой, которую я создал в этом публичном репозитории, который теперь доступен для вашего просмотра и изучения или даже внедрить это в свой аккаунт, чтобы успеть за развертываниями, происходящими в заинтересованных стеках прямо в вашей организационной или частной рабочей области Slack. Частные рабочие пространства Slack бесплатны для настройки и использования, как я, и вы можете создать простое приложение Slack с входящим webhook и направлять сообщения на выбранный вами канал.

event-forwarder Github repo

Случаи использования, которые испускают события Cloudformation Events 🎢

  • Развертывание CDK через терминал или даже уничтожение CDK Эти события видны разработчику, но могут не сохраняться нигде, кроме как в представлении консоли AWS. Ваши коллеги также не знают об этих развертываниях, пока не проверят консоль. Отправка этих данных в slack-каналы будет способствовать более активному участию команды.

  • Прямые изменения/удаления на уровне консоли cloudformation

  • Изменения на уровне ресурсов также можно отследить с помощью функции обнаружения дрейфа, но только один человек знает, что произошло, и не может легко сопоставить.

  • Кто-то редактирует шаблон формирования облака с помощью дизайнера и обновляет стек с/без набора изменений.

  • Или вы/команда может иметь другой параллельный IaC фреймворк, например terraform, вносящий некоторые изменения через терминалы.

  • Даже если ваш CI/CD конвейер выполняет развертывание на AWS, вам не нужно проверять их, чтобы понять, завершено ли развертывание, а slack пост достигнет вашего канала в считанные секунды последовательно по всем включенным окружениям.

  • Запрещенные окружения, в которых у вас нет доступа к проверке событий и созданных ресурсов, и вы можете узнать, не произошел ли сбой или не известны имена ресурсов, и вы не можете проверить это в консоли.

Возможности 🎢

Честно говоря, это мой второй уикенд над этим проектом, я считаю, что он может быть очень сильно улучшен, когда я получу обратную связь от сообщества и доработаю и расширю решение в будущем.

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

const stackEventsRule = new Rule(this, "stack-events-rule", {
      eventPattern: {
        detail: {
          "stack-id": [{ exists: true }],
        },
        source: ["aws.cloudformation"],
      },
      eventBus,
    });

Вход в полноэкранный режим Выход из полноэкранного режима

Извлеченные утилиты 🎢

Я использовал большинство общих частей этого решения в виде отдельных функций util, которые могут помочь упростить решение и, возможно, повторно использовать их в вашем собственном проекте.

  • Утилиты Slack
  • Консольные утилиты
  • Утилиты Dynamodb
  • Модель данных для взаимодействия с dynamodb
  • Определение событий Cfn и, возможно, скоро появятся новые.

Посмотрите папку config 🎢.

Этот проект рассчитан на различные ожидания разработчиков и ограничения, которые мы можем иметь, поэтому я ознакомился с ними и включил большинство конфигураций ниже в качестве config.

default.json и test.json взяты с GitHub с фиктивными полями, убедитесь, что вы создали local.json и production.json, переопределив необходимые поля по своему усмотрению.

{
    "account": "123",   //Primary account to host the solution
    "region": "ap-south-1", //Primary region to host the solution
    "slackhook": "", //You need to update your slack app incoming webhook as the primary delivery channel for your users
    "errorslackhook": "",//You need to update your slack app incoming webhook as the error delivery channel to notify the stack maintainers in your environment to get the errors as and when they happen and need to dive into cloudwatch logs to figure out most of the issues.
    "eventStore": "eventStores9",//This is some new dynamodb table name of your choice
    "remoteRegions":"us-east-1,us-east-2", //Your secondary regions to monitor
    "remoteAccounts":"123", //Your secondary accounts to monitor
    "logLevel":"WARN", //Use WARN for less verbose and use INFO for the verbose cloudwatch logs for the main processor handler
    "perPostEventCount": "10",//This is used to limit max N events in a single slack post, this is mainly to make sure we don't hit limit on a single slack post
    "dynamodbQueryPagingLimit": "15",//This is used to have limited the read units on a single API call to not throttle your dynamodb if you are using provisioned RCU.
    "logRetentionDays": "14",//Retention period for the primary handler cloudwatch logs
    "deleteNotified": "false", //Setting this to true will automatically delete data from dynamoDb once the event are notified. But I highly recommend you to have this false to understand the data which gets generated, which could help you with other integrations or possibilities in this monitoring
    "timeZone": "Asia/Kolkata", //custom time zone for time
    "locale": "en-US" //necessary locale
}
Вход в полноэкранный режим Выход из полноэкранного режима

Результаты сообщений Slack

Никогда не пропустите ничего, что происходит с вашими стеками cloudformation, поскольку вы всегда будете получать уведомления в соответствующем канале slack.

Уведомления об обнаружении дрейфа

Уведомления об удалении стека

Уведомления о создании/обновлении стека/ресурсов

Даже исключения отправляются в slack

Об этом можно напрямую сообщить сопровождающим, не копаясь в журналах cloudwatch для выявления и отслеживания проблемы.

И все эти классные вещи в этом slack посте имеют богатый формат, который может быть настроен в источнике, и он также включает в себя глубокую ссылку на ресурсы, предоставленные помимо ссылок на различные экраны консоли на уровне стека.

Обратите внимание, что эти ссылки на консоли будут работать, только если вы уже вошли в свой соответствующий аккаунт AWS в браузере, где вы их открываете, и если у вас есть необходимые привилегии, чтобы убедиться, что безопасность даже для производственных сред соблюдается, когда вы делитесь этим с различными членами вашей команды для любых последующих действий в любых потоках slack.

Dynamodb для хранения данных

В этой статье мы решили использовать dynamodb не только в качестве специального хранилища данных. Я считаю, что сгенерированные данные позволят получить дополнительные сведения и расширить возможности этого решения. Также я использовал предоставленные RCU и WCU, чтобы воспользоваться преимуществами бесплатного уровня, а также установить дросселирование, также рекомендую попробовать режим по требованию и платить по мере использования.

Индексы, созданные для поиска критических данных

Образец элемента БД

{
 "stackId": "arn:aws:cloudformation:ap-south-1:575066707855:stack/EventForwarderStack/279c3120-1f91-11ed-a6ef-022d5cdd6444",
 "time": 1661700649000,
 "account": "575066707855",
 "clientRequestToken": "",
 "detail": "{"stack-id":"arn:aws:cloudformation:ap-south-1:575066707855:stack/EventForwarderStack/279c3120-1f91-11ed-a6ef-022d5cdd6444","stack-drift-detection-id":"651434b0-26e6-11ed-817d-06bb5d2f96a6","status-details":{"stack-drift-status":"","detection-status":"DETECTION_IN_PROGRESS"},"drift-detection-details":{"drifted-stack-resource-count":-1}}",
 "detectionStatus": "DETECTION_IN_PROGRESS",
 "driftDetectionDetails": "{"drifted-stack-resource-count":-1}",
 "eventId": "2892c708-d38d-9a9a-115e-c981c1d3d62f",
 "logicalResourceId": "",
 "notified": "false",
 "notifiedTime": 1661700651498,
 "physicalResourceId": "",
 "region": "ap-south-1",
 "resources": [
  "arn:aws:cloudformation:ap-south-1:575066707855:stack/EventForwarderStack/279c3120-1f91-11ed-a6ef-022d5cdd6444"
 ],
 "resourceType": "",
 "status": "DETECTION_IN_PROGRESS",
 "statusReason": "",
 "type": "CloudFormation Drift Detection Status Change"
}
Вход в полноэкранный режим Выход из полноэкранного режима

Инженерные аспекты 🎢

Я бы хотел обсудить это дальше в следующих статьях, и мы будем дорабатывать этот стек и совершенствовать его. Всегда есть возможности для улучшения и совершенствования.

Кроме того, я сделал это репо публичным, и я уверен, что наше творческое сообщество захочет запросить возможности/проблемы, помочь патчами, внести свой вклад и доработать это решение дальше, чтобы подпитать наши обсуждения в наших инженерных статьях в ближайшее время рядом со мной.

Этот проект открыт для вашего щедрого вклада, если вы чувствуете, что это поможет другим разработчикам, а также вы можете решить проблемы или привнести новые возможности с помощью Pull request.

event-forwarder Github repo

⏭ У нас есть следующая статья по serverless, загляните на

https://dev.to/aws-builders/aws-cdk-101-cross-region-putevents-across-accounts-using-eventbridge-for-event-forwarder-project-1de2

Если вы пропустили мою предыдущую статью, найдите ее по ссылкам ниже.

🔁 Оригинальный пост предыдущей серии на 🔗 Dev Post

🔁 Репостнул предыдущий пост 🔗 dev на @aravindvcyber

🎉 Спасибо за поддержку! 🙏 и следите и делитесь этой серией, чтобы получить больше подобных статей.

Будет здорово, если вы захотите ☕ Купить мне кофе, чтобы поддержать мои усилия 😍.

🔁 Оригинальный пост 🔗 Dev Post

🔁 Reposted at 🔗 dev to @aravindvcyber

Оцените статью
devanswers.ru
Добавить комментарий