Как быстро и эффективно отлаживать шаблоны CloudFormation?

CloudFormation - это мощное предложение AWS, которое позволяет программно создавать стеки ресурсов AWS, такие как веб-уровень приложения, a высокопроизводительный вычислительный кластер, или весь стек приложения, с одним Вызов API. Это очень мощно. Использование его, безусловно, считается хорошей практикой AWS, особенно когда оно сочетается с шеф-поваром Puppet, или cloud-init. Отладка ведет меня к пороку.

Возьмем пример производства: шаблоны кластера mongodb не будут работать для меня. Я не знаю, почему. Я уверен, что это что-то простое, почти всегда. Моя проблема заключается не в том, что я не могу понять, что случилось. Это приведет к сбою стека между 20 и 30 минутами, а затем еще три или четыре минуты для удаления, при условии, что он полностью удалит ресурсы.

Что мне не хватает? Я знаю о знаке --disable-rollback и использую его как кислород. Я давно научился обертывать сообщения выхода с помощью cfn-signal и бросать их, как балласт с тонущего корабля. Как я могу сделать процесс отладки шаблона более быстрым, или я застрял навсегда, замечая мои ошибки через полчаса после того, как я их сделаю?

Ответ 1

Используйте команду aws cloudformation validate-template в инструменте CLI AWS. Он только проверяет, является ли ваш шаблон допустимым JSON или YAML, а не корректен ли ваши ключи и значения (например, не проверяет наличие опечаток в ключах)

Ответ 2

Другой вариант, год спустя, - это абстрагирование этих шаблонов в сторонней библиотеке, например troposphere. Эта библиотека создает полезную нагрузку JSON для вас и делает много проверок на этом пути. Это также решает проблему "Wow, управляющую проблемой JSON с 1000 строк, которая является печальной".

Ответ 3

Как я могу ускорить процесс отладки шаблонов, или я застрял навсегда, замечая свои ошибки через полчаса после их совершения?

Вот несколько советов, которые направлены на улучшение скорости итерации при разработке сложных шаблонов CloudFormation:

Используйте инструменты CloudFormation для проверки шаблонов и обновления стека

AWS уже изложил их в своем собственном документе с рекомендациями, поэтому я не буду их повторять:

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

Тестовые ресурсы в изоляции

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

  • Если вы разрабатываете или используете какие-либо сторонние пользовательские ресурсы, напишите модульные тесты с использованием соответствующих библиотек для языковой платформы, чтобы убедиться, что логика приложения работает должным образом во всех сценариях использования.
  • Имейте в виду, что количество времени для создания/обновления/удаления отдельного ресурса может широко варьироваться в зависимости от типа ресурса в зависимости от поведения базовых вызовов API. Например, сложный ресурс AWS::CloudFront::Distribution иногда может занимать 30-60 минут для создания/обновления/удаления, тогда как AWS::EC2::SecurityGroup обновляется за считанные секунды.
  • Отдельные ресурсы могут иметь ошибки/проблемы/ограничения в своей реализации, которые намного легче отлаживать и разрабатывать обходные пути для при тестировании в отдельности, а не в рамках гораздо большего стека. Помните об ограничениях, таких как Лимиты обслуживания AWS, в зависимости от настроек вашей индивидуальной учетной записи AWS, или о доступности региона в зависимости от региона, в котором вы создаете свой стек.

Создавайте сложные стеки небольшими шагами

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

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

Следить за ходом обновления стека

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

Ответ 4

Вы просмотрели редактор шаблонов CloudFormation AWS, который включен в AWS Toolkit для Eclipse? Он имеет подсветку синтаксиса, завершение заявления и развертывание в AWS CloudFormation.

Ответ 5

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

В моем случае, с vim, я сделал намного лучше, как только я потратил некоторое время на установку json синтаксических плагинов, а также (наконец) понял методы сгибания, чтобы легко перемещаться по большим CF файлам. Mine теперь предлагает опечатки (запятые, где их не должно быть и т.д.), А подсветка цвета экономит много времени, давая четкие визуальные подсказки.

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

Ответ 6

Для JetBrains IDE (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio ), есть плагин AWS CloudFormation, который поддерживает глубокую проверку шаблонов JSON и YAML CFN

Ответ 7

Если вы имеете дело с компьютерами EC2, я бы рекомендовал вам войти в систему EC2 и закрыть файл boot.log(/var/log/boot.log в RHEL6/Centos). Этот файл обновляется всеми действиями вашей оболочки (такие действия, как: установка, загрузка файлов, копирование файлов и т.д.).

Кроме того, используйте редакторы, такие как http://www.jsoneditoronline.org/, чтобы получить представление TREE вашего JSON. Это поможет вам проверить порядок элементов JSON.

И когда вы обновляете файлы, всегда используйте такие инструменты, как http://www.git-tower.com/blog/diff-tools-mac/ или фактическую систему контроля версий, чтобы убедиться, что вы случайно не изменили что-то, что может сломать ваш script.

Ответ 9

AWS CloudFormation linter обеспечивает дополнительный статический анализ помимо aws cloudformation validate-template

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

В дополнение к CLI, одним из самых популярных механизмов запуска linter является установка плагина редактора, такого как расширение кода Visual Studio, которое запускается при каждом сохранении файла

.Другие механизмы, такие как pre-commit Git hooks, описаны здесь

Visual Studio Code extension example screenshot

Ответ 10

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

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

Например:

"Parameters" : {
  "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
  "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}

Ответ 11

Вы также можете использовать CloudFormation Designer, доступный от amazon здесь: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1

Просто вставьте шаблон (JSON) на панели "Шаблон", а затем нажмите на значок галочки, чтобы подтвердить свой шаблон. Любые ошибки появятся на панели "Ошибка".

Надеюсь, что это поможет.

Ответ 12

Пожалуйста, проверьте мой валидатор облачной информации на https://pypi.org/project/cloudformation-validator/

Это проверит схему, а затем снова проверит список правил и позволит использовать пользовательские правила. Я также допускаю легкую интеграцию с инструментами развертывания.