Шаблоны CloudFormation: непрерывное тестирование инфраструктуры в виде кода
В проекте мы используем некоторые сервисы AWS, такие как AWS Lambda, EC2, AWS API Gateway, ElastiCache и т. Д. Также у нас есть шаблон CloudFormation, который описывает всю нашу инфраструктуру. По мере разработки проекта мы начинаем использовать некоторые новые сервисы AWS или изменяем конфигурацию тех, которые уже используются. Кроме того, мы должны поддерживать наш шаблон CloudFormation в актуальном состоянии.
И здесь мы сталкиваемся с проблемой, которая заключается в том, что мы должны быть уверены, что наш шаблон CloudFormation является корректным, правильным и что мы можем использовать его для создания инфраструктуры, если это будет необходимо. В таком случае нам нужно что-то вроде непрерывного тестирования нашего шаблона. Какие подходы больше подходят для этого?
Должны ли мы настроить автоматическое создание стека из нашего шаблона CloudFormation в рамках процесса непрерывной интеграции и отслеживать изменения шаблона в нашем хранилище? Или есть лучшие решения?
2 ответа
Мы использовали cfn-python-lint как предшественник для сборки. Если это не удастся, мы не строим. Правила, представленные в cfn-python-lint, намного более полны, чем aws cloudformation validate-template
кроме того, он дает вам некоторые правила надлежащей практики, а также дает вам основу для написания ваших собственных правил (которые мы используем для управления).
Кроме того, мы не строим ветки функций, мы строим только мастер. Мы даем разработчикам среду, в которой они могут работать с конвейерами, которые мы обычно запускаем на master и в dev / staging / prod. Это совершенно отдельный аккаунт, где они почти полностью правят. Это, очевидно, не является надежной защитой, поскольку наша область с песочницей может не отражать то, что находится в dev / staging / prod, так как люди играют с ней, но это нам очень помогло.
Вы можете сделать несколько простых проверок шаблонов CloudFormation, используя aws cloudformation validate-template
Команда CLI. Это примерно эквивалентно статическому анализу кода для других языков: он проверяет такие вещи, как опечатки имени параметра и синтаксически допустимый шаблон JSON/YAML; но весьма ограничен с точки зрения того, какую проверку он может выполнить.
Как говорится в этой статье, единственный надежный способ проверить, что шаблон CloudFormation будет создавать ресурсы так, как вы хотите / ожидаете, - это попробовать его, и это действительно означает создание стеков как часть вашего CI и процесса тестирования. Так как это может быть медленным в случае некоторых ресурсов и дорогостоящим в случае других, вы можете захотеть ограничить коммиты, на которых выполняется полное тестирование создания стека.