CloudFormation является мощным AWS предложение , которое позволяет создавать программные стеки АМС ресурсов, таких как веб - ярусе приложения, в высокой производительности вычислительных кластеров, или целого набора приложений, с помощью одного вызова API. Это невероятно мощно. Его использование, безусловно, считается хорошей практикой AWS, особенно в сочетании с Chef, Puppet или cloud-init. Отладка сводит меня к порокам.
Возьмем производственный пример: склад стандартные шаблоны кластеров mongodb мне не подходят . Я особо не знаю почему. Я уверен, что это что-то простое, как и почти всегда. Моя проблема не в том, что я не могу понять, что случилось. Дело в том, что стеку требуется от 20 до 30 минут, чтобы выйти из строя, а затем еще три или четыре минуты для удаления, при условии, что он вообще удаляет ресурсы правильно.
Что мне не хватает? Я знаю о --disable-rollback
флаге и использую его как кислород. Я давно научился оборачивать сообщения о выходе cfn-signal
и сбрасывать их, как балласт с тонущего корабля. Как я могу ускорить процесс отладки шаблона, или я застрял навсегда, замечая свои ошибки через полчаса после их совершения?
источник
Ответы:
Используйте
aws cloudformation validate-template
команду в инструменте AWS CLI. Он только проверяет, является ли ваш шаблон действительным JSON или YAML, а не правильность ваших ключей и значений (например, не проверяет опечатки в ключах)источник
aws cloudformation validate-template
в новых инструментах AWS CLI.aws cloudformation validate-template
, и он только проверяет, является ли ваш шаблон допустимым JSON или YAML, а не правильность ваших ключей и значений (например, не проверяет опечатки в ключах).Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]
. Согласноvalidate-template
команде, это не было проблемой, но пользовательский интерфейс возвращает эту ошибку.Другой вариант, год спустя, - абстрагировать эти шаблоны в стороннюю библиотеку, такую как тропосфера . Эта библиотека создает для вас полезную нагрузку JSON и попутно выполняет множество проверок. Это также решает проблему «Ух ты, управление файлом JSON из 1000 строк, конечно, печально» .
источник
Вот несколько практических советов, специально посвященных повышению скорости итераций разработки сложных шаблонов CloudFormation:
Используйте инструменты CloudFormation для проверки шаблонов и обновлений стека
AWS уже изложил их в своем собственном документе Best Practices , поэтому я не буду их повторять:
Цель этого шага - выявить очевидные синтаксические или логические ошибки перед фактическим выполнением создания / обновления стека.
Тестовые ресурсы изолированно
Прежде чем использовать какой-либо отдельный ресурс CloudFormation в сложном стеке, убедитесь, что вы полностью понимаете всю степень поведения этого ресурса при создании / обновлении / удалении, включая любые ограничения на использование и типичное время запуска / отключения, путем тестирования их поведения в небольших автономных стеках. первый.
AWS::CloudFront::Distribution
ресурса может потребоваться 30-60 минут , в то время какAWS::EC2::SecurityGroup
обновления - за секунды.Создавайте сложные стеки небольшими приращениями
При выполнении создания / обновления стека сбой любого отдельного ресурса приведет к тому, что стек откатит весь набор изменений ресурсов, что может без необходимости уничтожить другие успешно созданные ресурсы и занять очень много времени при создании сложного стека с длинным график зависимостей связанных ресурсов.
Решением является постепенное создание стека небольшими пакетами обновлений, добавление ресурсов по одному (или нескольким) за раз. Таким образом, если / когда происходит сбой при создании / обновлении ресурса, откат не приводит к уничтожению всех ресурсов вашего стека, а только набор ресурсов, измененный в последнем обновлении.
Следите за ходом обновления стека
Обязательно следите за ходом обновления стека , просматривая события стека, пока выполняется создание / обновление. Это будет отправной точкой для устранения дальнейших проблем с отдельными ресурсами.
источник
Вы смотрели на редактор шаблонов AWS CloudFormation, который включен в AWS Toolkit для Eclipse ? У него есть подсветка синтаксиса, завершение операторов и развертывание в AWS CloudFormation.
источник
Поздно к вечеринке, но я также могу добавить, что стоит потратить немного времени на настройку и изучение вашего редактора. Я знаю, что это звучит смехотворно просто в качестве ответа, но попробуйте.
В моем случае с vim я показал себя намного лучше, когда я потратил некоторое время на установку плагинов синтаксиса json, а также (наконец) понял методы сворачивания для легкой навигации по большим файлам CF. Мой теперь предлагает опечатки (запятые там, где их не должно быть и т. Д.), А цветное выделение экономит много времени, давая четкие визуальные подсказки.
Это может помочь уменьшить синтаксические ошибки, но логические ошибки в шаблоне лучше исправлять другими инструментами. Надеюсь, что однажды на CF появится режим «превью».
источник
ЛИНТЕР AWS CloudFormation обеспечивает дополнительный статический анализ запредельного
aws cloudformation validate-template
Он проинформирует вас, какие типы ресурсов и типы экземпляров недоступны в определенных регионах, проверит значения свойств на предмет допустимых значений, выловит циклические зависимости ресурсов, синтаксические ошибки, ограничения шаблонов и многое другое.
Помимо интерфейса командной строки, одним из самых популярных механизмов запуска линтера является установка плагина редактора, такого как расширение Visual Studio Code. которое запускается при каждом сохранении файла.
Другие механизмы, такие как перехватчики Git перед фиксацией, описаны здесь.
источник
Для IDE JetBrains (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio) в AWS CloudFormation есть плагин, который поддерживает глубокую проверку шаблонов JSON и YAML CFN.
источник
Если вы имеете дело с машинами EC2, то я бы порекомендовал вам войти на машину EC2 и закрыть файл boot.log (/var/log/boot.log в RHEL6 / Centos). Этот файл обновляется вместе со всеми вашими действиями оболочки (такими как: установка, загрузка файлов, копирование файлов и т. Д.).
Кроме того, используйте редакторы, например http://www.jsoneditoronline.org/, чтобы получить представление JSON в виде ДЕРЕВА. Это поможет вам проверить порядок элементов JSON.
И когда вы обновляете файлы, всегда используйте такие инструменты, как http://www.git-tower.com/blog/diff-tools-mac/ или настоящую систему контроля версий, чтобы убедиться, что вы случайно не изменили что-то, что может сломать ваш скрипт.
источник
В дополнение к команде AWS CLI
aws cloudformation validate-template
существует инструмент cfn-check на основе узлов , который выполняет более глубокую проверку.источник
Недавняя новая функция, добавленная в Cloudformation в декабре прошлого года, заключалась в добавлении дополнительных типов параметров . Эти новые типы позволяют вашим шаблонам выполнять более строгую проверку данных, а также могут работать без сбоев при создании ресурсов и вложенных стеков Cloudformation. У вас также есть возможность предоставлять более удобные для человека настраиваемые сообщения об ошибках, когда недопустимые значения передаются с использованием нового атрибута ConstraintDescription .
Новые типы особенно полезны при работе с различными ресурсами VPC. Вы можете убедиться, что параметры для ваших шаблонов имеют правильный тип и явно указывают на ожидание одного значения по сравнению со списком.
Например:
источник
Пожалуйста, проверьте мой валидатор облачной информации на https://pypi.org/project/cloudformation-validator/
Это проверит схему, а затем снова проверит список правил и разрешит настраиваемые правила. Я также допускаю простую интеграцию с инструментами развертывания.
источник
Вы также можете использовать CloudFormation Designer, доступный на Amazon здесь: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1
Просто вставьте свой шаблон (JSON) в область «Шаблон», а затем щелкните значок галочки, чтобы подтвердить свой шаблон. Все ошибки будут отображаться на панели «Ошибка».
Надеюсь это поможет.
источник