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

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

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

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


person Christopher    schedule 07.08.2012    source источник
comment
Даже опечатки в JSON иногда не обнаруживаются до 10+ минут в процессе сборки, поскольку он не замечает, что конкретный тип ресурса не имеет определенного имени атрибута, пока он не попытается запустить этот ресурс.   -  person Eric Hammond    schedule 08.08.2012
comment
Мои избранные в произвольном порядке: когда вы переключаете контексты ресурсов и сталкиваетесь с почти идентичными, но не совсем идентичными атрибутами, забывая чтобы добавить экранированную кавычку внутри объявления пользовательского скрипта и что-либо, связанное с VolumeAttachments, поскольку они иногда терпят неудачу без всякой причины.   -  person Christopher    schedule 08.08.2012
comment
+1 за упоминание об отключении автоматического отката - это было здорово для улучшения сообщений об ошибках для субпакетов   -  person izikandrw    schedule 08.06.2016
comment
Я обнаружил, что ошибки в сегментах политики приведут к тому, что такие вещи, как BucketPolicy, навсегда застрянут на этапе CREATE - если что-то застряло в CREATE, начните с него.   -  person Eric Nord    schedule 12.01.2017


Ответы (12)


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

person Luciano Issoe    schedule 01.09.2012
comment
Это также доступно в документах единого клика. aws.amazon.com/AWSCloudFormation/latest/UserGuide/ - person mp3foley; 13.11.2013
comment
Кстати, это aws cloudformation validate-template в новых инструментах AWS CLI. - person Christopher; 24.12.2014
comment
Для тех, кто сталкивается с этим вопросом в 2017+, теперь это aws cloudformation validate-template, и он только проверяет, является ли ваш шаблон допустимым JSON или YAML, а не правильность ваших ключей и значений (например, не проверяет опечатки в ключах). - person Daniel Kats; 04.05.2017
comment
По какой-то причине кажется, что игнорируется длина строки, например Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]. Согласно команде validate-template это не было проблемой, но пользовательский интерфейс возвращает эту ошибку. - person 030; 03.09.2019
comment
Если этот инструмент выполняет только проверку формата файла, этого не происходит; jsonlint или yamllint достаточно? Также этот инструмент имеет ограничение на размер файла 51 200 байт. - person Siva Senthil; 06.12.2019

Другой вариант, год спустя, - абстрагировать эти шаблоны в стороннюю библиотеку, такую ​​как troposphere. Эта библиотека создает для вас полезную нагрузку JSON и попутно выполняет множество проверок. Это также решает проблему «Вау, управлять файлом JSON с 1000 строками, конечно, очень печально».

person Christopher    schedule 11.07.2013
comment
Ух ты, управлять файлом JSON из 1000 строк, конечно, печально - наверняка поэтому были созданы вложенные стеки? ;-) Хотя я согласен - Тропосфера ужасна! - person YFP; 15.04.2014

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

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

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

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

Цель этого шага - выявить очевидные синтаксические или логические ошибки перед фактическим выполнением создания / обновления стека.

Тестовые ресурсы изолированно

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

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

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

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

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

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

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

person wjordan    schedule 02.01.2017
comment
О CloudFront и о том, сколько времени потребуется, знаете ли вы, чтобы стек был в завершенном состоянии, не дожидаясь, я хочу получить выходные данные, но не нужно ждать, пока дистрибутив будет развернут в моем случае - person mcfedr; 13.03.2018

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

person Wade Matveyenko    schedule 11.07.2013
comment
AWS Toolkit для Visual Studio был для меня незаменим. - person Ed Norris; 17.02.2014

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

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

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

Другие механизмы, например хуки Git перед фиксацией описаны здесь

Пример снимка экрана расширения кода Visual Studio

person Pat Myron    schedule 11.06.2019

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

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

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

person Aitch    schedule 11.07.2013
comment
Совсем не смешное предложение. Я не уверен, что смогу писать код без подсветки синтаксиса. - person Christopher; 12.07.2013
comment
есть предварительный просмотр CFN, который показывает все ресурсы, которые вы собираетесь создать, а также сообщает вам, сколько будет стоить ваш стек. Я использую Java API, поэтому не уверен, что он доступен в CLI, но попробуйте следующее: ссылка - person iGili; 06.10.2013

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

person Jason    schedule 28.06.2017

Если вы имеете дело с машинами 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/ или фактическую систему контроля версий, чтобы вы случайно не изменили что-то, что может нарушить работу вашего скрипта.

person ChaitanyaBhatt    schedule 18.11.2014

В дополнение к команде AWS CLI aws cloudformation validate-template существует инструмент cfn-check на основе узлов, который выполняет более глубокую проверку.

person Jason    schedule 28.06.2017

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

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

Например:

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

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

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

person WillRubel    schedule 09.08.2018

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

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

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

person VictorPro    schedule 18.11.2015