CloudFormation模板:以代码形式持续测试基础架构

时间:2018-10-05 11:18:05

标签: amazon-web-services continuous-integration amazon-cloudformation continuous-testing infrastructure-as-a-code

在项目中,我们使用一些AWS服务,例如AWS Lambda,EC2,AWS API Gateway,ElastiCache等。此外,我们还有CloudFormation模板,该模板描述了整个基础架构。随着项目的开发,我们开始使用一些新的AWS服务或更改一些已使用的服务的配置。此外,我们还应该使我们的CloudFormation模板保持最新。

在这里,我们面临的问题是,我们需要确保我们的CloudFormation模板有效,正确,并且如果需要,可以将其用于创建基础架构。在这种情况下,我们需要对模板进行连续测试。哪种方法更合适?

我们是否应该将CloudFormation模板配置为自动创建堆栈,作为持续集成过程的一部分,并跟踪存储库中的模板更改?还是有更好的解决方案?

2 个答案:

答案 0 :(得分:2)

我们一直在使用cfn-python-lint作为构建的前身。如果失败,我们就不会建立。 cfn-python-lint中提供的规则比aws cloudformation validate-template更为全面,此外,它为您提供了一些良好的实践规则,还为您提供了一个框架来编写您自己的规则(我们将其用于治理)。

此外,我们不建立在功能分支上,我们只构建主数据库。我们为开发人员提供了一个可以在通常可以在master和dev / staging / prod中运行的管道运行环境的环境。这是一个完全独立的帐户,他们几乎可以掌权。这显然不是万无一失的证据,因为我们的沙箱区域可能无法反映出人们在玩游戏后在开发/登台/产品中所发生的事情,但这对我们有很大帮助。

答案 1 :(得分:1)

您可以使用aws cloudformation validate-template CLI command对CloudFormation模板进行一些简单的验证。这大致相当于其他语言的静态代码分析:它检查诸如参数名称拼写错误之类的内容,并且该模板在语法上是有效的JSON / YAML;但在执行何种验证方面受到很大限制。

如该文章所述,检查CloudFormation模板是否会以您希望/期望的方式创建资源的唯一可行方法就是尝试它,这确实意味着在CI和测试中创建堆栈处理。由于这在某些资源的情况下可能会很慢,而在其他资源的情况下可能会很昂贵,因此您可能希望限制执行完整堆栈创建测试的提交。