Ara*_*nde 29 unit-testing amazon-web-services aws-cloudformation
当我们说cloudformation是'Infrastructure as Code'时,立即想到的下一个问题是如何测试这些代码.我们可以对此代码进行某种基本的单元测试
我正在对云形式验证进行折扣,因为这只是一种进行语法验证的方法,而且我可以使用任何其他免费的JSON/YAML验证器.
我更倾向于某种功能验证,可能测试我已经定义了所有用作引用的变量.可能测试我正在使用的任何属性实际上是该组件支持的属性
不期望它应该测试权限是否正确或我没有用尽我的限制.但至少除了基本的JSON/YAML语法验证之外
wjo*_*dan 31
以下是如何将多种测试软件方法应用于CloudFormation模板/堆栈的细分:
对于linting(检查CloudFormation模板代码的语法/语法正确性),您可以使用ValidateTemplate API检查基本模板结构,并使用CreateChangeSetAPI更详细地验证您的资源属性.
ValidateTemplate执行比简单的JSON/YAML语法检查程序更彻底的检查 - 它验证正确的模板解剖,正确的内部函数的语法/用法,以及正确的所有Ref值的解析.ValidateTemplate检查基本的CloudFormation语法,但不会针对特定的属性架构验证模板的资源.要根据AWS资源类型检查模板的参数,资源和属性的结构,CreateChangeSet如果任何参数或资源属性格式不正确,则应返回错误.首先执行单元测试需要回答问题:可以/应该测试的最小的独立功能单元是什么?对于CloudFormation,我认为最小的可测试单元是Resource.
官方AWS资源类型由AWS支持/维护(无论如何都是专有实现),因此不需要由最终用户开发人员编写的任何其他单元测试.
但是,您自己的自定义资源可以并且应该进行单元测试.这可以使用实现自己语言中的合适测试框架来完成(例如,对于Lambda支持的自定义资源,可能lambda-tester是一个很好的起点).
这是CloudFormation堆栈最重要和最相关的测试类型(主要用于将各种资源整合到一个集成的应用程序中),以及可以使用更多细化和最佳实践开发的类型.以下是关于如何通过实际创建/更新包含真实AWS资源的完整堆栈来集成测试CloudFormation代码的一些初步想法:
AWS::CloudFormation::WaitCondition资源来表示成功的测试/断言,以便成功的堆栈创建表明成功的集成测试运行,并且失败的堆栈创建表明集成测试运行失败.除了CloudFormation之外,在测试基础架构作为代码的空间中值得一提的一个有趣的工具是Test Kitchen的kitchen-terraform一组插件,它允许您为Terraform模块编写全自动集成测试套件.最终可以为CloudFormation构建类似的集成测试工具,但尚不存在.
小智 7
此工具"cfn-nag"解析CloudFormation模板的集合,并应用规则来查找可能导致不安全的基础结构的代码模式.该工具的结果包括违反资源的逻辑资源标识符以及违反规则的解释.进一步阅读:https://stelligent.com/2016/04/07/finding-security-problems-early-in-the-development-process-of-a-cloudformation-template-with-cfn-nag/
虽然该工具会尝试匹配许多特定规则,但粗略的类别是:
IAM和资源策略(S3 Bucket,SQS等)匹配以某种方式过度宽松的策略(例如,动作或主体中的通配符)
安全组入口和出口规则匹配过于宽松的规则(例如,入口规则打开到0.0.0.0/0,端口范围1-65535打开)
访问日志查找未启用适用资源的访问日志(例如Elastic Load Balancers和CloudFront Distributions)
未对适用资源启用或强制执行的加密(服务器端)加密(例如,EBS卷或S3存储桶上的PutObject调用)
| 归档时间: |
|
| 查看次数: |
12511 次 |
| 最近记录: |