Советы по переходу с AWS CloudFormation на CDK

В настоящее время модель “Инфраструктура как код” (IaC) является проверенным способом предоставления облачных ресурсов. CDK — ваш невероятный шанс сделать это в экосистеме AWS. Рассмотрим ситуацию, когда шаблон CloudFormation установлен, и вам нужно выполнить новую настройку с помощью CDK, используя TypeScript. Знакомьтесь с моими собственными наблюдениями и заключениями.

Кейс

Представьте себе, что вам предстоит реализовать новый проект с командой, использовавшей CFN в течение длительного времени. Уже наработано много шаблонов, и в команде повторяют одни и те же вещи снова и снова. При этом нужно выполнить определенную пользовательскую настройку CI/CD. С этим бэкграундом вы беретесь за новый проект с CDK. Не терпится начать? Мне это знакомо. Но есть некоторые сложности. Дело в том, что CFN — это механизм шаблонов на основе YAML/JSON. Проще говоря, CDK — это абстрактная конструкция на основе CFN, которая использует язык программирования для структурированной подготовки инфраструктуры. После годового использования этого инструмента я готов поделиться лайфхаками со всеми, кто собирается перейти с Cloudformation/SAM.

Стартуйте с небольшого проекта

Для начала подойдет проект, не обремененный множеством элементов. Старайтесь избегать проектов, требующих от вас самостоятельной настройки VPC. Воздержитесь также от проектов с контейнерными оркестровками с использованием ECS или Kubernetes. Идеальным стартовым проектом будет тот, у которого есть разрешения S3, Lambda, CloudFront, API Gateway, DynamoDB и IAM.

Варианты возможных проектов:

  • Запланированное событие, помещающее данные в S3/DynamoDB;
  • Событие на Github/Bitbucket;
  • Вызов API для выполнения какой-либо простой работы, такой как перенаправление запроса другой стороне.

Еще одним важным моментом является использование CDK версии 2. x. В большинстве руководств предлагается использовать первую версию. Она устарела и имеет много проблем с зависимостями. Опыт разработки будет намного приятнее со второй версией. Для ее установки запустите:

npm install cdk@next

Изучите базовые концепты CDK

Вам необходимо усвоить несколько важных понятий, связанных с CDK. Первый из них — “App” (“Приложение”). Это корневой элемент структуры. Здесь вы можете описать стеки и их создание.

Самый интересный концепт — это конструкция. Из документации AWS:

Конструкции являются основными строительными блоками приложений AWS CDK. Конструкция представляет собой “облачный компонент” и инкапсулирует все, что необходимо AWS CloudFormation для создания компонента.

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

3 уровня абстрагирования конструкций:

  1. Ресурсы CFN — сопоставимые с подчеркнутыми ресурсами CFN.
  2. Уровень 2 — предоставляющий конструкции и позволяющий осуществлять ввод текста. Конструкции также могут быть взяты из библиотеки здесь. Многие конструкции позволят вам иметь типы и совершать меньше ошибок.
  3. Уровень 3 — это целостные шаблоны. Они могут быть выполнены AWS-разработчиками или другими специалистами. Те, что исходят от сторонников и подвижников AWS, можно найти здесь.

Сила CDK заключается в третьем уровне. Он позволит автоматизировать создание самых распространенных в вашей команде шаблонов. Это может быть настраиваемый домен или настройка конвейера.

Планирование стеков

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

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

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

Досконально изучите оригинальную документацию

CDK — потрясающий инструмент, с моей точки зрения. Но он не избавит вас от чтения и понимания облачной информации. Де-факто CDK синтезирует шаблон CloudFormation в формате JSON. Таким образом, обязательно нужно посмотреть, что он делает для вас.

В официальной документации, если ее внимательно проштудировать, можно найти полезные лайфхаки. Большую часть времени я гуглю что-то вроде “AWS::DynamoDB::Table”. Затем в поисковой выдаче выбираю страницу документации для необходимого элемента инфраструктуры.

Неудачи неизбежны

Мой опыт использования CDK начался с неудачи развертывания, когда я попытался создать корзину S3. Потребовалось 15 минут, чтобы наконец развернуть ее. Это нормально — потерпеть неудачу с CDK в самом начале. Старайтесь не спешить и не переносите все приложение сразу.

Во время одного из проектов я провел настройку CI/CD с помощью SAM и CloudFormation. Полный переход к CDK, начиная с фактической разработки комплекта, занял бы немало времени. Таким образом, мое решение состояло в том, чтобы перенести инфраструктуру кода реализации в CDK и оставить конвейер с той же настройкой. Я многому научился в тот раз, чтобы уже в следующем проекте перенести всю инфраструктуру в CDK.


Короче говоря, CDK стоит попробовать на очередном PoC или внутреннем инструменте, чтобы получить реальный опыт кодирования при создании инфраструктуры. Это особенно важно для тех, кто при создании функциональных средств придерживается методологии системной инженерии. А она требует, чтобы инженеры отвечали не только за реализацию. Использование одного и того же языка для инструмента IaC исключает переключение контекста между TypeScript и YAML. Тем самым повышается производительность всей команды.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Igor Soroka, Tips On Moving From AWS CloudFormation To CDK

Предыдущая статьяБесперебойный API на Golang
Следующая статьяТоп-9 PET-проектов для начинающих javascript-разработчиков