- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我们说 cloudformation 是“基础设施即代码”时,立即想到的下一个问题是如何测试该代码。我们可以对此代码进行某种基本的单元测试
而且我不考虑 cloudformation 验证,因为这只是进行语法验证的一种方式,而且我可以使用任何其他免费的 JSON/YAML 验证器来完成。
我更倾向于某种功能验证,可能会测试我是否已经定义了用作引用的所有变量。可能测试我使用的任何属性实际上都是该组件支持的属性
没想到它应该测试权限是否正确或者我是否没有用尽我的限制。但至少除了基本的 JSON/YAML 语法验证之外还有一些东西
最佳答案
以下详细介绍了如何将几种测试软件方法应用于 CloudFormation 模板/堆栈:
对于 linting(检查 CloudFormation 模板代码的语法/语法正确性),您可以使用 ValidateTemplate用于检查基本模板结构的 API,以及 CreateChangeSet
用于更详细地验证您的资源属性的 API。
ValidateTemplate
执行的检查比简单的 JSON/YAML 语法检查器要彻底得多 - 它会验证正确的 Template Anatomy , Intrinsic Functions 的正确语法/用法,以及所有 Ref
的正确分辨率值(value)观。ValidateTemplate
检查基本 CloudFormation 语法,但不会根据特定属性架构验证模板的资源。为了根据 AWS 资源类型检查模板的参数、资源和属性的结构,如果任何参数或资源属性格式不正确,CreateChangeSet
应返回错误。执行单元测试首先需要回答以下问题:可以/应该测试的最小独立功能单元是什么?对于CloudFormation,我认为最小的可测试单元是Resource .
官方AWS Resource Types由 AWS 支持/维护(并且无论如何都是专有实现),因此不需要最终用户开发人员编写任何额外的单元测试。
但是,您自己的 Custom Resources可以而且应该进行单元测试。这可以使用实现自己的语言中的合适测试框架来完成(例如,对于 Lambda 支持的自定义资源,也许像 lambda-tester
这样的库将是一个很好的起点)。
这是 CloudFormation 堆栈最重要、最相关的测试类型(主要用于将各种资源绑定(bind)到一个集成应用程序中),也是可以使用更多细化和最佳实践开发的类型。以下是关于如何通过实际创建/更新包含真实 AWS 资源的完整堆栈来集成测试 CloudFormation 代码的一些初步想法:
AWS::CloudFormation::WaitCondition
资源来表示成功的测试/断言,因此成功的堆栈创建表示成功的集成测试运行,失败的堆栈创建表示失败的集成测试运行。除了 CloudFormation 之外,在测试基础设施即代码领域值得一提的一个有趣工具是 kitchen-terraform
,一组 Test Kitchen 的插件它允许您为 Terraform 编写全自动集成测试套件模块。最终可以为 CloudFormation 构建类似的集成测试工具,但目前还不存在。
关于unit-testing - 有没有办法对 AWS Cloudformation 模板进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40299413/
有没有办法在试运行模式下运行 AWS cloudformation 更新?因为我意识到 aws validate 不会拾取所有错误,并且当您运行更新时会抛出新错误。 最佳答案 最接近的方法是运行模拟测
我是 cloudformation 的新手,我正在尝试按照 AWS 文档创建具有方法限制的使用计划。我需要定义一个 ApiStage具有 Throttle 属性。 我尝试了以下方法,但收到错误 - 属
我正在整理一个用于运行 cloudformation/sam 的角色/策略,以尽可能地限制访问。是否有一组通用的策略操作应该用于运行 create-stack? 这是一个代码构建,我使用它在应用程序运
我正在尝试创建一个资源,其属性之一不是常量值。听起来像是堆栈参数的工作,只不过它是一个在某些情况下可以采用 Ref 函数形式的字符串。具体来说,如果是初始创建,我希望参数值是对另一个资源的 Ref,如
我的实际任务是: 在 CloudFormation 外部创建 AMI 使用 CloudFormation 从 AMI 启动实例 分离所有现有卷(包括根卷和数据卷) 附加根据最新快照创建的新卷(根卷和数
我在 cloudformation 中有一个启动实例的模板。它工作正常,但它没有创建我在模板中提到的标签。下面是我的模板 { "AWSTemplateFormatVersion": "2010-0
我尝试通过 Cloudformation 使用 AWS Conformance Pack。我创建了一些非常简单的东西: 以下堆栈创建 S3 存储桶 + 一致性包。然后我将一致性包模板存储到另一个 S3
我的目标是编写一个 Lambda 函数,根据标签将角色附加到 EC2 实例。因此,每当创建新的 Ec2 实例时,都必须自动为其附加一个角色。我希望根据 EC2 实例状态更改(正在运行)触发 lambd
我想使用 CloudFormation 配置 OpenVPN,我想我可以从市场获取 AMI ID 并启动它,因为我想启动一个具有 10 个连接的实例,但不幸的是我无法从市场获取 AMI ID 。如何获
我有一个正在创建 ACM 证书的 cloudformation 堆栈。昨天的代码运行良好,因此我将其移至嵌套堆栈中。 该模板来自一个非常漂亮的示例。我有一个托管区域,这就是我请求证书的地方,模板有一个
我目前正在使用 terraform 和 CloudFormation 之间犹豫。有一个问题我还没有看到答案(或者也许,我只是还没有找到它)。 在 terraform 中,您可以为所有事物指定准确的名称
我收到以下错误,但不知道它来自哪里,希望有人可以提供帮助。 模板验证错误:模板格式错误:任何 Properties 成员都必须是 JSON 对象。 cloudformation脚本 { "AWST
我目前将所有参数存储在 Systems Manager Parameter Store 中,并在 CloudFormation 堆栈中引用它们。 我现在陷入了同一 Cloudformation 模板的
我正在创建一条通往互联网网关的公共(public)路由。当我通过 GUI 进行配置时,完全没有问题。当我尝试通过我的 Cloudformation 模板执行此操作时,每次都会失败。这是网关的构建,没有
在cloudformation模板中,有一个输出部分,用于与跨堆栈对话。 如果我们在一个 AWS 账户中只创建一个堆栈,那么这部分不应存在,这样说是否正确? 最佳答案 输出部分可用于通过 Export
我有以下结构(几乎是样板文件)。我的问题是,我在 ParentStack 中定义的映射在 ChildSTack 中可用还是我需要复制它们?我知道我可以将参数传递给 ChildStack,但想知道 Ma
我有一个主 Cloudformation 模板,它调用两个子模板。我运行了第一个模板,并在资源的 Outputs 部分中捕获了输出。我已经在嵌套的第二个模板中使用 ChildStack01 输出值进行
除了Web控制台中的“检查漂移”功能之外,是否还有其他触发器可以进行检查? cloudformation 是否会在堆栈更新之前自动检查偏差? 假设我有一个创建 s3 存储桶的 cf 堆栈。然后我从 W
有没有办法在 CFN 模板中包含自定义验证器? 我知道我们可以像这样添加规则执行: https://aws.amazon.com/blogs/mt/how-to-perform-cross-param
我正在使用 CloudFormation 模板创建 KMS key ,然后使用该模板在另一个模板中创建 IAM 角色,因为它引用了 KMS key 。需要更新创建 KMS key 的堆栈以将 IAM
我是一名优秀的程序员,十分优秀!