0

我们正处于在 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 集成。

4

1 回答 1

1

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

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

我还建议您研究 Docker 以打包和部署应用程序的节点。非常便利。

于 2014-12-08T21:13:57.537 回答