Сборка проектов TypeScript AWS CDK из командной строки

Для многих компаний развертывание в облаке стало стратегией, и ни один облачный провайдер не стал настолько распространенным, как Amazon Web Services (AWS).

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

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

Затем появилась новая парадигма - инфраструктура как код. Теперь разработчики могли настраивать, контролировать версии и развертывать свою инфраструктуру AWS с помощью кода с помощью AWS CDK.

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

AWS CDK Gen - способ быстро создать основу для проекта AWS

Я хочу познакомить вас с AWS CDK Gen. Этот простой инструмент командной строки позволяет создавать общие конструкции AWS, отвечая всего на несколько запросов. Этот инструмент не только обрабатывает генерацию кода TypeScript, ответственного за создание наших конструкций CDK, но также и дополнительных файлов, которые полезны при работе с этими конструкциями. Например, NodeJs Lambda будет поставляться с рабочим файлом примера обработчика и конструкцией интеграции Lambda, чтобы легко интегрироваться в API-шлюз! Все, что потребуется разработчику, - это просто заменить код обработчика собственной логикой JavaScript.

Какие конструкции доступны?

В инструменте доступен ряд распространенных конструкций. Вот поддерживаемые в настоящее время варианты:

  • Создание лямбда-выражения Go
  • Создание узла JS Lambda
  • Создайте API-шлюз
  • Создайте сегмент S3
  • Создание таблицы DynamoDB и лямбда-выражений - зависит от создания шлюза API.
  • Добавление лямбда-маршрута к шлюзу API - в зависимости от того, были ли созданы шлюз API и лямбда.

Давайте рассмотрим пример того, как мы могли бы использовать этот инструмент на практике. Мы рассмотрим, как создать всю инфраструктуру, необходимую для развертывания Go Lambda, за 5 простых шагов.

Создание рабочего Go Lambda и API-шлюза за 5 шагов

Шаг 0. Подготовка к установке

Сначала я начну с базового репозитория AWS CDK для целей этой демонстрации, но мы можем использовать любой существующий проект CDK. Мы инициализируем это репо, запустив cdk init app --language=typescript в пустом каталоге. По завершении мы получаем такой пустой файл стека.

Теперь я устанавливаю свой инструмент с помощью npm i --save-dev aws-cdk-gen и определяю в своем проекте сценарий для его запуска.

"aws-cdk-gen": "aws-cdk-gen",

Примечание. Вы также можете установить этот пакет глобально, если хотите.

Шаг 1. Генерация лямбда-выражения Go

Теперь я запустил свою программу и сгенерирую Go Lambda.

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

Среди множества выводимых файлов:

  • Актив S3 для загрузки нашего скомпилированного кода Go в zip-архиве.
  • Стандартная лямбда-функция, указывающая на нашу корзину S3.
  • Интеграция с API-шлюзом V2 Lambda.
  • Рабочий обработчик Go Lambda.
  • README по созданию нашего кода Go.
  • Два сценария оболочки для установки зависимостей и автоматизации сборки и архивирования скомпилированного артефакта Go.

Как видите, у нас есть все инструменты, чтобы начать разработку собственной Go Lambda.

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

Шаг 2. Создайте API-шлюз

Мы повторно запускаем наш инструмент и выбираем создание шлюза API. И снова нам нужно только назвать наш API Gateway.

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

Шаг 3. Создайте маршрут для нашей лямбды.

Поскольку мы сгенерировали нашу лямбду с помощью нашего инструмента, теперь мы можем добавить маршрут для нашей лямбды Go в наш API-шлюз с помощью AWS CDK Gen.

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

Теперь наша интеграция с Go Lambdas импортирована и определен маршрут GET на основе наших входных данных. Сейчас мы прошли 90% пути. У нас осталось всего несколько шагов для развертывания.

Шаг 4. Создайте экземпляр нашего шлюза API в нашем базовом стеке.

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

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

Шаг 5. Установите все зависимости, соберите и разверните

Поскольку это новый проект, нам нужно выполнить небольшой шаг по установке всех недостающих зависимостей. Наши конструкции используют несколько пакетов aws-cdk. Нам просто нужно установить их с помощью npm.

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

Как только это будет сделано, мы сможем развернуть и пользоваться полностью работающим API-шлюзом с присоединенной Go Lambda!

Как мне начать?

Я предлагаю зайти на сайт npm и установить пакет. Он работает с проектами aws-cdk после версии 1.85.0.

Поэкспериментируйте с проектом и дайте мне знать, что вы думаете.

Напутственные слова

Это мой первый проект с открытым исходным кодом. В результате я призываю людей взглянуть и связаться с вами, если у вас есть какие-либо вопросы, отзывы или вы хотите внести свой вклад.