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



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



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



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

615   11  

11 ответов:

использовать aws cloudformation validate-template команда в инструменте AWS CLI

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

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

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

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

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

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

вот несколько лучших практических предложений, направленных конкретно на повышение скорости итерации сложной CloudFormation-template development:

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

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

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

тестирование ресурсов в изоляции

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

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

строить сложные стеки с небольшими шагами

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

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

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

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

для Иды компании JetBrains (IntelliJ идея WebStorm PhpStorm именно PyCharm RubyMine AppCode CLion Гогланд DataGrip всадника Андроид студии ), есть у AWS CloudFormation плагин, который поддерживает глубокую проверку шаблонов JSON и YAML CFN

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

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

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

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

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

например:

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

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

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

надеюсь, что это помогает.

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

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

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

Comments

    Ничего не найдено.