AWS中的云信息最佳实践

时间:2014-12-07 13:40:15

标签: amazon-cloudformation cloud-init

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

根据AWS最佳实践,我们希望使用云形成创建整个基础架构,并设置测试/阶段/产品环境。

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

- 一旦我们有一个运行cloudformation的prodonemtn并且以后我们想要在prod上更新新的AMI,我们如何在不中断的情况下使用cloudformation更新实时运行的EC2实例?

- 在新版本完成后,将多个EC2备注代码部署到多个EC2备注的最佳实践/方法是什么?我们目前不使用Contineus集成。

1 个答案:

答案 0 :(得分:1)

将您的设置分成多个堆栈是一个非常好的主意。一个显而易见的原因是堆栈具有您最终可能达到的某些限制。更实际的原因是,每次您只想部署新版本时,您都不需要更新您的VPC。网络架构通常不太频繁地改变。另一个避免拥有一个巨大模板或更改重要模板的原因是什么?不必要的模板,就是你总是冒着搞乱的风险。如果您的模板中出现错误并且您意外删除了重要资源(例如已注释掉),那么您会非常抱歉。因此,谨慎分离堆栈可能是一个好主意。

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

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