2014-12-07 46 views
0

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

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

- 使用一个cloudformation stack/template是否有上述所有组件(VPC,安全组,EC2实例,数据库实例,S3存储桶,cloudfront等)是一个好主意?或者我们应该创建两个堆栈:1)具有网络重新组件,2)具有EC2相关组件?

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

当新版本完成时,多个EC2备注的代码部署的最佳实践/多种方式是什么?目前我们不使用Contineus集成。

回答

1

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

如果您想更新您的应用程序,您可以简单地使用新的AMI更新模板,并且CFN将知道需要重新创建或更新的内容。你可以阅读滚动更新here。不过,我建议考虑使用一些更直接的方法来部署实际的代码,比如Ansible或Chef。

我还建议你看看Docker的包装和部署应用程序的节点。非常便利。