Как быстро и эффективно отлаживать шаблоны 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.
Ответ 8
В дополнение к команде AWS CLI aws cloudformation validate-template
есть node cfn-check инструмент, который делает более глубокую проверку.
Ответ 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/
Это проверит схему, а затем снова проверит список правил и позволит использовать пользовательские правила. Я также допускаю легкую интеграцию с инструментами развертывания.