Ответ 1
Вот пример того, как несколько методов тестирования программного обеспечения могут быть применены к шаблонам/стекам CloudFormation:
пыление
Для связывания (проверки кода шаблона CloudFormation на правильность синтаксиса/грамматики) вы можете использовать API-интерфейс ValidateTemplate для проверки базовой структуры шаблона и API-интерфейс CreateChangeSet
для более подробной проверки свойств вашего ресурса.
- Обратите внимание, что
ValidateTemplate
выполняет гораздо более тщательную проверку, чем простой синтаксис JSON/YAML checker-, он проверяет правильную анатомию шаблона, правильный синтаксис/использование внутренних функций и правильное разрешение всех значенийRef
. -
ValidateTemplate
проверяет базовый синтаксис CloudFormation, но не проверяет ресурсы шаблона по конкретным схемам свойств. Для проверки структуры параметров шаблона, ресурсов и свойств по типам ресурсов AWSCreateChangeSet
должен возвращать ошибку, если какие-либо параметры или свойства ресурса сформированы неправильно.
Модульное тестирование
Выполнение модульного тестирования сначала требует ответа на вопрос: какова наименьшая отдельная единица функциональности, которую можно/нужно тестировать? Я считаю, что для CloudFormation самым маленьким тестируемым модулем является Resource.
Официальные типы ресурсов AWS поддерживаются/поддерживаются AWS (и в любом случае являются проприетарными реализациями), поэтому не требуется никаких дополнительных модульных тестов, написанных разработчиками для конечных пользователей.
Тем не менее, ваши собственные пользовательские ресурсы могут и должны быть проверены модулем. Это можно сделать с помощью подходящей среды тестирования на собственном языке реализации (например, для пользовательских ресурсов, поддерживаемых lambda-tester
, возможно, хорошей отправной точкой будет библиотека, подобная lambda-tester
).
Интеграционное тестирование
Это наиболее важный и актуальный тип тестирования для стеков CloudFormation (которые в основном служат для связывания различных ресурсов вместе в интегрированное приложение), а также тип, который может использовать больше уточнений и наилучших разработок. Вот несколько первоначальных идей о том, как провести интеграционное тестирование кода CloudFormation путем фактического создания/обновления полных стеков, содержащих реальные ресурсы AWS:
- Используя язык сценариев, выполните создание стека CloudFormation с использованием языка AWS SDK. Дизайн шаблона для возврата стека выходов, отражающих поведение, которое вы хотите проверить. После того, как стек создан языком сценариев, сравните выходные данные стека с ожидаемыми значениями (а затем, при необходимости, удалите стек впоследствии в процессе очистки).
- Используйте ресурсы
AWS::CloudFormation::WaitCondition
для представления успешных тестов/утверждений, чтобы успешное создание стека указывало на успешный запуск интеграционного теста, а неудачное создание стека - на неудачный запуск интеграционного теста.
Помимо CloudFormation, одним из интересных инструментов, заслуживающих упоминания в области тестирования инфраструктуры как кода, является kitchen-terraform
, набор плагинов для Test Kitchen, которые позволяют создавать полностью автоматизированные интеграционные тестовые наборы для модулей Terraform. Подобный жгут для тестирования интеграции в конечном итоге может быть создан для CloudFormation, но пока не существует.