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

Инфраструктура как код (IaC) - ключевая концепция DevOps, которая необходима в мире науки о данных, когда мы создаем и определяем рабочие нагрузки производственного уровня. IaC позволяет разработчикам управлять инфраструктурой проекта как программным обеспечением. Это позволяет разработчикам легко поддерживать и настраивать изменения в ресурсах и архитектуре проекта. Подобно традиционному написанию сценариев, IaC позволяет разработчикам использовать декларативный язык для предоставления ресурсов. Доступно множество инструментов IaC, таких как Terraform, Chef, Puppet и Ansible. Для сегодняшней демонстрации мы будем использовать CloudFormation, специфичный для ресурсов AWS. Из этой статьи вы поймете, как поддерживать все свои ресурсы в одном файле программного обеспечения, а также поймете преимущества в отношении скорости, которые IaC приносит в таблицу. Без IaC затраты и время на ручное развертывание различных инфраструктур могут стремительно расти, поддерживая свою инфраструктуру в виде программного обеспечения, вы можете легко и быстро тестировать различные развертывания из центрального источника. В этой статье мы рассмотрим пример ручной подготовки ресурсов по сравнению с развертыванием сценария CloudFormation для создания REST API и бессерверная лямбда-функция на AWS.

ПРИМЕЧАНИЕ. Тем из вас, кто плохо знаком с AWS (хорошо иметь некоторый опыт, чтобы полностью понять статью), убедитесь, что вы создали учетную запись по следующей ссылке, если вы хотите следовать за вами. Убедитесь, что у вас также установлен AWS CLI для работы с примером. Я также предоставлю список услуг, которые мы будем использовать, с более подробными определениями. Если вы уже знакомы с этими услугами, переходите к интересующим вас частям.

Оглавление

  1. Сервисы AWS
  2. Обзор примера
  3. Развертывание вручную
  4. Развертывание с помощью CloudFormation
  5. Весь код и заключение
  6. Дополнительные ресурсы / ссылки

1. Сервисы AWS

AWS API Gateway (API GW): сервис, который позволяет разработчикам создавать, публиковать и отслеживать безопасные RESTful и Socket API. Мы будем использовать этот сервис для создания нашего REST API.

AWS Lambda: сервис бессерверных вычислений, который позволяет разработчикам запускать код без управления серверами и их предоставления. Мы будем использовать этот сервис для настройки примера бессерверной функции на бэкэнде, интегрированном с нашим REST API.

Доступ и управление идентификацией (IAM): позволяет управлять доступом к сервисам AWS с помощью разрешений и ролей. Мы создадим роль для нашей функции Lambda, чтобы иметь возможность доступа к API GW.

AWS CLI: для работы с ресурсами и сервисами AWS вы можете использовать интерфейс командной строки, который они предоставляют, а не консоль для легкого доступа.

AWS SAM: абстракция CloudFormation, которая помогает создавать бессерверные приложения. Дополнительные сведения см. в SAM CLI.

2. Обзор примера

В этой статье мы будем создавать REST API с API Gateway, который интегрирован с бессерверной бэкэнд-функцией Lambda, которая работает с запросами GET и POST из нашего API. На первом этапе подробно описывается, как вручную создавать и развертывать эти ресурсы через консоль AWS, а на втором этапе рассматривается использование CloudFormation для автоматизации и повторения того же процесса.

3. Развертывание вручную

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

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

Здесь у нас есть образец лямбда-функции «Hello World», которая должна возвращать показанный оператор, если она правильно интегрирована с API Gateway.

Теперь, когда у нас настроена наша функция Lambda, мы хотим настроить наш REST API, чтобы убедиться, что он может взаимодействовать с функцией Lambda, поэтому мы переходим к Amazon API Gateway. Нажмите «Создать API» и выберите «REST API» из предложенных вариантов.

Теперь мы идем и создаем метод GET из раскрывающейся панели «Действия» и обязательно указываем наш REST API на нашу лямбда-функцию.

Теперь мы можем развернуть наш API, чтобы проверить, правильно ли он интегрирован с нашей функцией Lambda (выберите любое имя, которое вы хотите для этапа, мы будем использовать «prod»).

После того, как вы развернули свой API, вы должны увидеть URL-адрес на этапе prod, и если вы получите доступ к этому URL-адресу, вы должны увидеть, как ваша функция Lambda в действии возвращает «Hello World», как мы описали в функции.

4. Развертывание с помощью CloudFormation

Поначалу это не казалось таким уж плохим, это были несколько шагов, которые заняли несколько минут, но предположим, что у вас было больше, чем один метод, больше, чем один API, и больше, чем один разработчик . Как вы собираетесь централизованно отслеживать все эти ресурсы и любые изменения? Что делать, если вы хотите настроить свою лямбда-функцию для интеграции с другим API? Вам нужно удалить этот текущий метод или API вручную? Это потребует от разработчиков наличия доступа и разрешений для разных учетных записей, а также возможности видеть и предоставлять ресурсы друг другу в разных учетных записях при работе друг с другом. Все это может привести к большой трате времени, средств и ресурсов, поэтому мы будем использовать AWS CloudFormation для развертывания этого же примера за считанные минуты, а также предоставим разработчику гибкость и свободу настройки своей инфраструктуры с помощью простого сценария.

Итак, сначала, как работает CloudFormation? Мы будем использовать файл YAML для объявления и предоставления наших ресурсов, которые мы развертываем в AWS, для создания стека CloudFormation, содержащего все ресурсы, необходимые для нашего проекта. Шаблон, который мы будем использовать, известен как шаблон SAM, который представляет собой абстракцию CloudFormation с той же базовой функциональностью, но больше ориентирован на бессерверные приложения с меньшим объемом кода YAML. Для тех, кто не знаком с YAML, подумайте о нем как о похожем на JSON (CloudFormation использует оба), причем оба имеют возможность создавать большие декларативные файлы конфигурации. Сначала мы переходим к нашему локальному редактору кода, а не к консоли, и запускаем ту же функцию Lambda. Наряду с этим мы создадим файл template.yaml, который будет содержать нашу инфраструктуру.

В наш helloworld.py мы можем поместить тот же код Python, что и в консоли.

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

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

Теперь мы можем сосредоточиться на наших ресурсах, которые представляют собой лямбда-функцию и REST API, мы определяем их в теге Resources в нашем файле template.yaml. Чтобы получить доступ к документации по определению бессерверных функций в CloudFormation, перейдите по следующей ссылке.

Здесь мы определяем некоторые параметры для создания лямбда-функции. Для этого события мы создаем REST API, поскольку он запускает нашу лямбда-функцию. Существует ряд других параметров, которые вы можете указать для своей бессерверной функции, например CodeURI, Description и т. Д., Которые вы можете отслеживать в документации CloudFormation. Как правило, лучший способ подойти к созданию файла шаблона - это перейти в документацию CloudFormation и увидеть параметры / язык, принятые для создания файла шаблона для вашей конкретной службы / ресурса.

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

После выполнения первой команды bash вы должны увидеть созданный файл шаблона sam, который мы используем во второй команде для создания нашего стека CloudFormation.

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

Здесь мы видим, что все ресурсы, которые мы подготовили с помощью кода, успешно развернуты и созданы с помощью простого файла template.yaml. Чтобы дополнительно проверить это, мы можем щелкнуть созданный API и протестировать URL-адрес, как мы это делали в нашем ручном развертывании, чтобы гарантировать ту же рабочую функциональность после развертывания API.

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

5. Полный кодекс и заключение



Чтобы воспроизвести пример и получить доступ к коду для полной демонстрации, загляните в репозиторий выше. Поначалу CloudFormation может показаться устрашающим из-за странного синтаксиса и языка yaml, и определенно есть кривая обучения с освоением CloudFormation. Но если вы установите уровень комфорта и знакомы с сервисом, он поможет вам создавать невероятно мощные приложения и управлять ими простым и эффективным способом из одного центрального файла шаблона. Хотя это сравнение показывает разницу в простоте и эффективности развертывания вручную по сравнению с IaC, оно становится еще более очевидным, когда ваш проект растет и у вас есть несколько разработчиков, работающих над одним проектом. Чтобы узнать, как легко CloudFormation помогает создавать конвейеры CI / CD в AWS, в этой статье вы узнаете о следующих шагах.

Я надеюсь, что эта статья была полезной для всех, кто пытался больше узнать о IaC, CloudFormation или AWS в целом. Не стесняйтесь связываться со мной в LinkedIn или подписывайтесь на меня в Medium, чтобы узнать больше о моих статьях. Делитесь любыми мыслями или отзывами, спасибо за чтение!

Дополнительные ресурсы / ссылки

Мастер-класс CloudFormation Udemy

AWS Serverless Udemy Class