gpt4 book ai didi

unit-testing - 有没有办法对 AWS Cloudformation 模板进行单元测试

转载 作者:行者123 更新时间:2023-12-03 09:23:10 26 4
gpt4 key购买 nike

当我们说 cloudformation 是“基础设施即代码”时,立即想到的下一个问题是如何测试该代码。我们可以对此代码进行某种基本的单元测试

而且我不考虑 cloudformation 验证,因为这只是进行语法验证的一种方式,而且我可以使用任何其他免费的 JSON/YAML 验证器来完成。

我更倾向于某种功能验证,可能会测试我是否已经定义了用作引用的所有变量。可能测试我使用的任何属性实际上都是该组件支持的属性

没想到它应该测试权限是否正确或者我是否没有用尽我的限制。但至少除了基本的 JSON/YAML 语法验证之外还有一些东西

最佳答案

以下详细介绍了如何将几种测试软件方法应用于 CloudFormation 模板/堆栈:

检查

对于 linting(检查 CloudFormation 模板代码的语法/语法正确性),您可以使用 ValidateTemplate用于检查基本模板结构的 API,以及 CreateChangeSet用于更详细地验证您的资源属性的 API。

  • 请注意,ValidateTemplate 执行的检查比简单的 JSON/YAML 语法检查器要彻底得多 - 它会验证正确的 Template AnatomyIntrinsic Functions 的正确语法/用法,以及所有 Ref 的正确分辨率值(value)观。
  • ValidateTemplate 检查基本 CloudFormation 语法,但不会根据特定属性架构验证模板的资源。为了根据 AWS 资源类型检查模板的参数、资源和属性的结构,如果任何参数或资源属性格式不正确,CreateChangeSet 应返回错误。

单元测试

执行单元测试首先需要回答以下问题:可以/应该测试的最小独立功能单元是什么?对于CloudFormation,我认为最小的可测试单元是Resource .

官方AWS Resource Types由 AWS 支持/维护(并且无论如何都是专有实现),因此不需要最终用户开发人员编写任何额外的单元测试。

但是,您自己的 Custom Resources可以而且应该进行单元测试。这可以使用实现自己的语言中的合适测试框架来完成(例如,对于 Lambda 支持的自定义资源,也许像 lambda-tester 这样的库将是一个很好的起点)。

集成测试

这是 CloudFormation 堆栈最重要、最相关的测试类型(主要用于将各种资源绑定(bind)到一个集成应用程序中),也是可以使用更多细化和最佳实践开发的类型。以下是关于如何通过实际创建/更新包含真实 AWS 资源的完整堆栈来集成测试 CloudFormation 代码的一些初步想法:

  • 使用脚本语言,使用该语言的 AWS SDK 执行 CloudFormation 堆栈创建。设计返回Stack的模板Outputs反射(reflect)您想要测试的行为。脚本语言创建堆栈后,将堆栈输出与预期值进行比较(然后可以选择在清理过程中删除堆栈)。
  • 使用AWS::CloudFormation::WaitCondition资源来表示成功的测试/断言,因此成功的堆栈创建表示成功的集成测试运行,失败的堆栈创建表示失败的集成测试运行。
<小时/>

除了 CloudFormation 之外,在测试基础设施即代码领域值得一提的一个有趣工具是 kitchen-terraform ,一组 Test Kitchen 的插件它允许您为 Terraform 编写全自动集成测试套件模块。最终可以为 CloudFormation 构建类似的集成测试工具,但目前还不存在。

关于unit-testing - 有没有办法对 AWS Cloudformation 模板进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40299413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com