AWS 中的 cloudformation 最佳实践

Posted

技术标签:

【中文标题】AWS 中的 cloudformation 最佳实践【英文标题】:cloudformation best practices in AWS 【发布时间】:2015-02-05 05:39:49 【问题描述】:

我们正处于在 AWS 上运行我们的服务的早期阶段。我们的服务器托管在 AWS 中,在 VPC 中,具有私有和公共子网,并且在私有和公共子网中有多个实例,使用 ELB 和前端 Web 服务器的自动缩放设置(使用 AMI)。首先使用 AWS 控制台手动设置整个环境(VPC、安全组、EC2 实例、数据库实例、S3 存储桶、云端)。 应用服务器托管 jboss,war 文件部署在服务器上。

根据 AWS 最佳实践,我们希望使用 cloudformation 创建整个基础设施并设置测试/阶段/生产环境。

-使用一个 cloudformation 堆栈/模板来拥有上述所有组件(VPC、安全组、EC2 实例、数据库实例、S3 存储桶、云端等)是否是个好主意?或者我们应该创建两个堆栈 1) 具有网络重装组件和 2) 具有 EC2 相关组件?

-一旦我们有一个使用 cloudformation stact 运行的 prod envoronemtn,如果我们想在未来更新 prod 上的新 AMI,我们如何使用 cloudformation 更新实时运行的 EC2 实例而不中断?

-当新版本完成时,将代码部署到多个 EC2 笔记的最佳实践/多种方法是什么?我们目前不使用 Contius 集成。

【问题讨论】:

【参考方案1】:

将您的设置分成多个堆栈是一个非常好的主意。一个明显的原因是堆栈有一定的限制,你最终可能会达到。一个更实际的原因是,您实际上并不需要在每次只想部署新版本时更新您的 VPC。网络架构通常变化较少。避免使用一个巨大的模板或不必要地对“重要”模板进行更改的另一个原因是,您总是冒着把事情搞砸的风险。如果您的模板中有错误并且您意外删除了重要资源(例如注释掉),您将非常抱歉。因此,出于谨慎考虑将堆栈分开可能是个好主意。

如果您想更新您的应用程序,您只需使用新的 AMI 更新模板,CFN 就会知道需要重新创建或更新什么。你可以阅读滚动更新here。但是,我建议考虑使用更直接的方式来部署您的实际代码,例如 Ansible 或 Chef。

我还建议您使用 Docker 来打包和部署应用程序的节点。非常方便。

【讨论】:

以上是关于AWS 中的 cloudformation 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

持续集成:使用 AWS Cloudformation+OpsWorks 在新创建的 EC2 实例上运行 Jenkins Build,最佳实践是啥?

AWS cloudformation:一个大模板文件还是许多小模板文件?

如何更改 cloudformation 中的默认根 EBS 大小? [AWS]

CloudFormation 中的 AWS API Gateway 方法响应

AWS CloudFormer 支持哪些 AWS 服务?

迭代模板中的 AWS cloudformation 资源数组