我正在使用 Spinnaker 将 3 层系统部署到 QA,然后再部署到生产。这些系统中的每一个系统中的配置文件都指向其他系统。如果我在 AMI 中烘焙 QA 配置,那么在升级到 Prod 时如何更改它?是 1) 拥有两组不同的 AMI - 一组用于 QA,一组用于 Prod,或者,2) 让 AMI 没有配置,然后在部署后(以某种方式)配置它以更改配置文件?推荐什么?
2 回答
在我们公司,我自己也在努力解决类似的问题。我的解决方案是使用 Packer 脚本为特定目的创建 AMI。这使我能够 - 1. 尽可能多地配置服务器,然后将这些配置存储在 AMI 中。2. 如果需要,可以轻松更改这些配置。
然后,使用 Ansible 脚本启动 AMI,并在特定实例上进行所有其余配置。
就我而言,我选择为舞台和制作创建不同的图像,但主要是因为它们差异很大。如果它们更相似,我可能会选择为两者使用单个 AMI。
Ansible 在这里为您提供的优势是考虑您的配置,包括一次写入生产和登台服务器。
您可以在部署时为集群定义自定义AWS 用户数据(在集群配置的高级设置下)。然后,您可以在应用程序中检索此用户数据。这将允许您更改这些类型的配置。
在 Netflix,我们有一系列 init 脚本,它们被烘焙到基础镜像中,并提供了一种通过 nebula / gradle 扩展自定义启动 (init.d) 脚本的机制。这通常会设置诸如 NETFLIX_ENVIRONMENT 之类的值,这些值是众所周知的并针对其进行编程的。
我们还通过https://github.com/Netflix/archaius使用了特征翻转机制。这允许我们添加集群外部但可以针对它们的属性。
当涉及到安全凭证时,本演示文稿中概述了该方法,但本质上,图像会到达发布此类凭证的外部服务。https://speakerdeck.com/bdpayne/key-management-in-aws-how-netflix-secures-sensitive-data-without-its-own-data-center