Поиск по сайту:

Как автоматизировать ресурсы AWS с помощью шаблонов CloudFormation


На этой странице

  1. Предпосылки
  2. Создание первого стека
  3. Удаление стеков CloudFormation
  4. Заключение

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

AWS Cloudformation позволяет настроить инфраструктуру в виде кода. По сути, это инфраструктура как механизм кода, который работает в облаке и помогает пользователям выделять и управлять вычислительными ресурсами, хранилищем и другими ресурсами. Шаблон CloudFormation — это файл JSON с инструкциями по созданию или обновлению ресурсов AWS. Мы можем использовать AWS CLI, AWS SDK, такие как boto3, или сервис AWS CloudFormation для создания шаблонов.

CloudFormation предоставляет множество преимуществ, таких как:

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

Если вы хотите автоматизировать развертывание рабочих нагрузок в AWS, использование CloudFormation — один из лучших способов сделать это.

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

Предпосылки

Чтобы следовать этому руководству, вам потребуются следующие предварительные условия:

  • AWS CLI, установленный на вашем локальном компьютере в версии 1.6.1 или более поздней версии и настроенный с регионом по умолчанию. Эта же версия также должна быть настроена для Python 2.6 или 3+.
  • Основное понимание сервисов AWS и некоторый опыт работы с консолью AWS.

Создание вашего первого стека

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

1. Откройте ваш любимый браузер. Перейдите в этот репозиторий GitHub и загрузите три файла на локальный жесткий диск.

  • createstack.json
  • updatestack1.json
  • updatestack2.json

2. Теперь перейдите к консоли AWS ---> CloudFormation.

3. Вы увидите следующий экран. Щелкните Создать стек ---> С новыми ресурсами.

4. Вы увидите следующий экран. Нажмите «Шаблон готов» ---> Загрузите файл шаблона ---> Выберите «Файл» ----> Выберите свой createstack.json файл, который вы скачали ранее ---> Далее.

Когда вы создаете новый стек, вы должны предоставить шаблон для вашего стека. Вы можете сделать это тремя способами:

  • Шаблон готов: выберите этот вариант, если у вас уже есть шаблон. Если нет, перейдите к следующему варианту.
  • Использовать образец шаблона. Используйте этот параметр, чтобы получить преимущество при создании шаблона. Руководство пользователя AWS содержит несколько примеров шаблонов CloudFormation.
  • Создание шаблона в Designer. AWS CloudFormation Designer — это новейший способ создания стека. Он использует интерфейс перетаскивания, похожий на другие популярные инструменты, такие как Sharepoint, чтобы помочь вам создать свой шаблон.

В этой демонстрации используется первый вариант «Шаблон готов», поскольку у вас уже есть шаблоны (файлы, которые вы загрузили на свой диск).

Вы можете открыть файл creestack.json в своем редакторе, чтобы взглянуть на него. Вы увидите следующие строки в файле createstack.json.

  • \Ресурсы\: { — это раздел, который создает AWS CloudFormation. Это группа всех физических ресурсов, которые вы будете создавать.
  • \catpics\: логический ресурс с типом корзины S3.
  • \Тип\: \AWS::S3::Bucket\ — это физический ресурс, который будет создан AWS CloudFormation.

5. На следующем экране укажите имя для вашего стека (htf) и нажмите «Далее». Каждому стеку требуется уникальное имя в регионе AWS, чтобы вы могли различать их. Здесь нельзя использовать какие-либо специальные символы, только буквы, цифры и символы подчеркивания (без пробелов). AWS автоматически создает уникальный идентификатор стека для упрощения идентификации.

6. На следующем экране оставьте значение по умолчанию и нажмите Далее.

7. На следующем экране оставьте значения по умолчанию и нажмите Создать стек.

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

Процесс создания занимает около 4-5 минут, чтобы создать его. Вы можете увидеть, что происходит, посмотрев статус стеков на панели инструментов CloudFormation, как показано ниже. Вы можете увидеть логические ресурсы catpics в левой части, и в каждом из этих ресурсов вы можете увидеть физические ресурсы, которые AWS CloudFormation создает для них (CREATE_IN_PROGRESS).

Вы можете перейти на вкладку ресурсов, чтобы просмотреть физические ресурсы, создаваемые для этого стека. В данном случае это сегмент S3 с именем catpics и идентификатором физических ресурсов htf-catpics-1roqn54xwm3of, как показано ниже.

8. Теперь перейдите на панель инструментов S3. На панели инструментов S3 вы можете видеть объекты, создаваемые в корзине. В этом случае имя стека для корзины S3 — htf-catpics-1roqn54xwm3of, как показано ниже.

Вы можете видеть, что имя ведра соответствует следующему шаблону: ваше имя стека (htf) — ваше логическое имя стека (catpics) — случайная строка (1roqn54xwm3of). Этот шаблон очень важно, чтобы вы знали. Если вы не укажете идентификаторы своих физических ресурсов в шаблоне, AWS CloudFormation использует этот шаблон для создания имени для ваших ресурсов. Сила этого заключается в том, что теперь вы можете использовать один и тот же шаблон для создания нескольких стеков; AWS CloudFormation автоматически присвоит им уникальные имена!

Для такой службы, как S3, очень важно уникальное имя; имя ведра должно быть глобально уникальным, чтобы вы могли хранить в нем данные. Имена ваших корзин не могут совпадать. Вы не сможете поместить объекты в ведро, если попытаетесь назвать его тем же именем.

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

Обновление стека

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

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

Как правило, при обновлении стеков в CloudFormation. Вы возьмете шаблон, который использовали для создания стека, и либо добавите новые ресурсы, либо обновите существующие ресурсы, либо удалите существующие ресурсы.

1. Откройте в редакторе загруженный ранее файл updatestack1.json. Вы увидите следующие блоки кода. Давайте сравним этот шаблон с шаблоном createstack.json, который вы использовали ранее. Как видите, мы добавим дополнительный логический ресурс с именем dogpics. Что еще более важно, не было внесено никаких изменений ни в какие существующие логические ресурсы, то есть в существующие катпики. Ресурсы catpics не были изменены или удалены. Я только добавлю дополнительный логический ресурс, а именно Dogpics.

2. Перейдите на панель инструментов CloudFormation. Выберите свой стек (htf) и нажмите «Обновить».

3. На следующем экране выберите Заменить текущий шаблон ---> Загрузить файл шаблона ---> Выбрать файл ---> Выберите файл updatestack1.json ---> Далее.

4. На следующем экране нажмите Далее ---> Далее ---> Обновить стек, как показано ниже. Вы можете видеть, что CloudFormation показывает изменения, которые будут внесены. В данном случае мы добавили логический идентификатор dogpics. CloudFormation также показывает действие, которое будет выполнено (Добавить), и тип логического ресурса (AWS::S3::Bucket). Столбец Замена пуст.

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

После завершения процесса обновления вы можете видеть ниже, что в нашем стеке есть ресурсы как catpics, так и dogpics.

Перейдите на панель инструментов S3, и вы увидите, что была создана дополнительная корзина с собачьими изображениями с именем htf-dogpics-4qesklu84ugq. Вы можете видеть, что именование ведра с использованием того же шаблона соответствует строке имени стека — логическому имени стека — случайной строке.

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

Мы удалим ресурс dogpics из нашего стека. Это более рискованно, чем добавление, потому что удаление ресурсов может сломать ваш стек. Поскольку мы все еще учимся, давайте попрактикуемся, удалив наш ресурс Dogpics, чтобы посмотреть, что произойдет.

5. Перейдите на панель инструментов CloudFormation. Выберите стек htf, нажмите «Обновить» ---> «Заменить текущий шаблон» ---> «Выбрать файл» ---> на этот раз мы снова выберем файл createstack.json ---> «Далее» -- -> Далее ---> Далее.

6. На следующем экране нажмите Обновить стек. В разделе «Предварительный просмотр набора изменений» вы можете видеть, что столбец «Действие» теперь выглядит так: «Удалить». В этом случае CloudFormation удаляет ресурс dogpics и соответствующие физические ресурсы (htf-dogpics-4qesklu84ugq).

Перейдите на панель инструментов S3, и вы увидите, что ведро с фотографиями исчезло с панели инструментов S3.

Вы получите событие DELETE_COMPLETE в событии стека.

Удаление логических ресурсов немного рискованно, потому что оно может удалить что-то, но этот риск связан только с логическими ресурсами, которые вы удалили из шаблона (ресурсы Dogpics). До сих пор мы не вносили никаких изменений ни в один из других существующих логических ресурсов, таких как ресурсы catpics. Таким образом, никакое обновление стека не может повлиять на физические ресурсы catpics. Есть еще один вариант обновления стека. Используя эту опцию, мы можем изменить конфигурацию существующего логического ресурса.

7. Откройте в редакторе файл updatestack2.json, который вы скачали ранее. Вы увидите следующий блок кода.

Файл updatestack2.json очень похож на шаблон createstack.json, который вы использовали ранее, за исключением двух основных отличий. Мы снова добавляем второй логический ресурс, dogpics. Но мы также внесли изменения в catpics.

Мы добавили дополнительный раздел конфигурации под названием «Свойства», где мы можем определить дополнительные свойства для данного логического ресурса. В этом случае мы будем создавать корзину S3. Мы явно задаем имя корзины физического ресурса как catareawesome-howtoforge.

8. Перейдите на панель инструментов CloudFormation. Выберите стек htf, нажмите «Обновить» ---> «Заменить текущий шаблон» ---> «Выбрать файл» ---> на этот раз мы выберем  updatestack2. json файл ---> Далее ---> Далее ---> Далее.

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

Первое изменение выглядит знакомым. Мы собираемся добавить дополнительный логический ресурс для собачьих изображений, которым будет корзина S3. Но мы также видим действие Modify. А изменение — это на самом деле самая рискованная вещь, которую вы можете сделать со стеком CloudFormation.

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

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

Вторая возможность заключается в том, что ресурс обновляется, а обслуживание прерывается из-за какого-либо нарушения. Например, когда вы обновляете свой стек для изменения размера инстанса EC2. Когда вы сделаете это, вам нужно будет вручную перезагрузить экземпляр EC2. Будет запущен новый AMI, и у вас могут возникнуть некоторые простои. Но как только будет запущен новый AMI, ваш сервис будет доступен сразу.

Последняя возможность заключается в том, что обновление удалит весь ваш существующий физический ресурс и заменит его новым (заменой). Это самая рискованная возможность при обновлении стека CloudFormation. Вы должны быть очень внимательны, когда делаете это. Когда произойдет такая замена, в столбце «Замена» будет указано «Истина», как показано на снимке экрана ниже.

На панели инструментов CloudFormation Stacks вы можете увидеть, что в нем говорится: «Запрошенное обновление требует создания нового физического ресурса; следовательно, необходимо создать его». Таким образом, CloudFormation удаляет существующий ресурс и создает новый.

Перейдите на панель инструментов S3, и вы увидите, что ведро catpics больше не существует, а создано новое, catareawesome-howtoforge. Обратите внимание, что мы явно указываем физическое имя (catsareawesome-howtoforge) для ресурса внутри шаблона CloudFormation, он не применяет к имени ресурса какие-либо случайные символы.

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

Удаление стеков CloudFormation

Теперь, когда мы изменили шаблон и обновили наш стек, нам нужно убедиться, что мы удалили стек после завершения работы над ним. Если мы не удалим неиспользуемые стеки, они останутся на панели инструментов CloudFormation Stack на неопределенный срок. Нам пришлось бы вручную войти туда и удалить его.

На панели инструментов CloudFormation выберите свой стек, а затем нажмите «Удалить». Когда CloudFormation удаляет стек, он также удаляет все ресурсы в этом стеке. Невозможно просто удалить один ресурс, например корзину S3 или экземпляр EC2. Это действие сделано по замыслу.

Заключение

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

Пожалуйста, оставьте комментарий ниже, если у вас есть какие-либо вопросы или предложения. Спасибо за чтение!