我们使用云形成为我们的 AWS EC2 实例提供支持。我们有 3 个不同的堆栈 - 测试、暂存和生产。我们更新任何堆栈的图像的工作流程如下:
- 更新“golden master”实例
- 将黄金母版快照保存到磁盘映像
- 通过 json 文件在我们的云形成配置中为给定堆栈和
update
堆栈更改 ami 引用。
这将关闭堆栈中的实例并使用新的磁盘映像重新配置它们。
我们的测试或暂存堆栈没有遇到任何问题,每个堆栈都包含一个 ec2 实例。每次更新时,图像都会被替换,没有任何问题。
我们的生产堆栈似乎没有以相同的方式工作 :-(。它包含(至少)2 个位于负载均衡器后面的实例。当我们以相同的方式更新此堆栈时,ec2 实例不会立即刷新(即,更新完成后,框仍在从上一个磁盘映像运行)。好消息是,当负载均衡器自动扩展时,会使用新的映像。
负载平衡规则和云形成之间是否存在冲突?
任何见解都将不胜感激
例子:
测试堆栈:https://gist.github.com/robsquires/629fb6da2d10869363e5
生产堆栈:https://gist.github.com/robsquires/79de54eeb04d620d5222
答案1
这是设计使然,并记录在AWS::AutoScaling::LaunchConfiguration用户指南:
重要的
当您更新 LaunchConfiguration 资源时,AWS CloudFormation 将删除该资源并使用更新后的属性和新名称创建新资源。此更新操作不会在 Auto Scaling 组中正在运行的 EC2 实例上部署任何更改。换句话说,更新只是替换 LaunchConfiguration,这样当 Auto Scaling 组启动新实例时,它们将获得更新后的配置,但现有实例将继续使用它们最初启动时的配置运行。这与您手动对 Auto Scaling 组进行类似更改的方式相同。
我强烈建议您在测试堆栈中创建与生产完全相同的模板,只调整值以降低成本,例如MinSize
,MaxSize
和DesiredCapacity
1 等等。