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

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

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

🔁 Оригинальный пост из предыдущей серии на 🔗 Сообщение разработчиков

🔁 Сделал репост предыдущего поста серии на 🔗 dev в @aravindvcyber

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

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

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


Ожидания 🏗️

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

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

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


Коротко об архитектуре 🏗️

Арка Диаг

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

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

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

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

  • Remote Event Router Stack который развертывается в одном или нескольких регионах через учетные записи, пересылая определенные события моста событий (в частности, события Cloudformation) в конкретную целевую шину событий по умолчанию (в стеке ниже) из текущей шины событий по умолчанию (источник) с использованием правил моста событий.
  • Event Forwarder Stack который находится в одном регионе для приема и преобразования событий в различные каналы доставки (Slack — первый канал) из EventBus по умолчанию (цель).


Предпосылки 🏗️

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

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

1) По крайней мере одно пользовательское приложение Slack с входящим веб-перехватчиком, сгенерированным и настроенным для публикации в необходимых каналах Slack.

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

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

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


Репозиторий проекта на GitHub 🎢

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

репозиторий event-forwarder на Github


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

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

простое развертывание стека

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

Удаление на уровне консоли

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

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

обнаруживать дрейфы

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

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

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


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

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

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

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

Войти в полноэкранный режим

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


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

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

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


Проверьте папку конфигурации 🎢

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

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
}
Войти в полноэкранный режим

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


Slack Результаты публикации

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


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

обнаружение дрейфа


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

удалить 1/2

удалить 2/2


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

создать/обновить 1

создать/обновить 2

создать/обновить 3


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

Об этом можно напрямую сообщить специалистам по сопровождению, не дожидаясь изучения журналов CloudWatch для выявления и отслеживания проблемы.

уведомление об ошибке администратору через slack post

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

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


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"
}
Войти в полноэкранный режим

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


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

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

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

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

репозиторий event-forwarder на Github

⏭ У нас есть следующая статья о бессерверных технологиях, зацените

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

🔁 Оригинальный пост из предыдущей серии на 🔗 Сообщение разработчиков

🔁 Сделал репост предыдущего поста серии на 🔗 dev в @aravindvcyber

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

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

Купи мне кофе на ko-fi.com

🔁 Исходный пост в 🔗 Сообщение разработчиков

🔁 Размещено на 🔗 dev в @aravindvcyber