通过CI / CD进行CloudFormation部署是否是一个好习惯?我目前正在考虑安全和性能方面。
例如,如果有人不小心删除了一个数据库,CloudFormation只会删除它……可能会有代码审查来防止这种情况……但是只是想知道它是否是一个好习惯。
对于无服务器应用程序,也许别无选择?就像其他情况一样,部署所有内容都太手工
另一个观察结果是性能,CloudFormation很少更改,但是如果它属于CI / CD流程的一部分,则仍然需要运行。有什么办法可以加快速度吗?
答案 0 :(得分:3)
当然。
只有真正做到这一点,才能真正实现CI / CD。 考虑以下场景:对于特定版本,您添加了消息传递队列(AWS SQS)。现在,如果您还没有将Cloudformation与CI / CD集成在一起,那么您可以从您的环境中读取/写入SQS的代码进入您的环境,但是仅仅因为SQS不存在,因为您的Cloudformation发生了变化,您将无法执行任何一种操作否则将无法执行SQS。因此,最终您会遇到半生不熟的环境。
为避免这种陷阱,强烈建议您将Cloudformation作为CI / CD的一部分执行
关于您的担忧'例如,如果有人不小心删除了一个数据库,CloudFormation只会删除它',即使使用实际代码也可能发生这种情况。例如,开发人员输入了一些测试代码来清理数据库,但是却忘记了删除该代码,并且该代码在生产环境中执行。但是理想情况下,由于手动测试,自动测试和JUnits的防护栏,这不会发生。因此,在类似的情况下,应将Cloudformation视为任何其他代码(实际上,Cloudformation最好用 Infrastructure as Code 描述”)进行彻底测试。要查看有关单元测试Cloudformation的详细信息,请参阅Is there a way to unit test AWS Cloudformation template
答案 1 :(得分:1)
是的。如果您将基础架构视为软件(IaS),那么您还应该能够在Cloudformation模板上实施现代CI / CD软件实践,例如语法检查,单元测试,功能测试,验证,自动测试和部署等。
AWS在此处提供了最佳实践解决方案:
https://aws.amazon.com/answers/devops/aws-cloudformation-validation-pipeline/
该解决方案提供了以下介绍:
> “许多Amazon Web Services(AWS)客户使用AWS CloudFormation以代码形式管理其基础架构,并以可控和可预测的方式帮助部署AWS资源。DevOps团队通常肩负着在启动前验证AWS CloudFormation模板的任务,以确保他们遵循行业最佳实践并满足公司特定的业务和治理要求。这些团队经常利用AWS Developer Tools,这是一组服务,旨在帮助DevOps专业人员遵循持续集成和持续交付(CI / CD)的惯例,并创建自己的管道以自动构建,验证并部署代码。”