云形成 - 更新 elb 后面的堆栈不会更新 AMI

Rob*_*res 1 amazon-ec2 amazon-web-services amazon-elb amazon-cloudformation

我们正在使用云形成为我们的 AWS EC2 实例提供支持。我们有 3 个不同的堆栈 - 测试、暂存和生产。我们更新任何堆栈的图像的工作流程如下:

  1. 更新“黄金大师”实例
  2. 将 Golden Master 快照到磁盘映像
  3. 为给定的堆栈和update堆栈更改我们的 cloud-formation 配置中的 ami 引用(通过 json 文件)。

这会关闭堆栈中的实例 + 使用新磁盘映像重新配置它们。

我们的测试或暂存堆栈没有问题,每个堆栈都包含一个 ec2 实例。每次我们更新,图像被替换没有问题。

我们的生产堆栈似乎并没有以相同的方式工作 :-(。它包含(至少)2 个位于负载均衡器后面的实例。当我们以相同的方式更新此堆栈时,ec2 实例不会立即刷新(即更新完成后,这些盒子仍然从以前的磁盘映像运行)。好消息是当负载平衡器自动缩放时会使用新的映像。

负载均衡规则和云形成之间会不会有冲突?

任何见解将不胜感激

例子:

测试栈:https : //gist.github.com/robsquires/629fb6da2d10869363e5

生产堆栈:https : //gist.github.com/robsquires/79de54eeb04d620d5222

dia*_*0ne 5

这是设计使然,并记录在AWS::AutoScaling::LaunchConfiguration用户指南中:

重要的

当您更新 LaunchConfiguration 资源时,AWS CloudFormation 将删除该资源并使用更新的属性和新名称创建一个新资源。此更新操作不会在 Auto Scaling 组中正在运行的 EC2 实例之间部署任何更改。换句话说,更新只是替换 LaunchConfiguration,这样当 Auto Scaling 组启动新实例时,它们将获得更新的配置,但现有实例将继续使用它们最初启动时的配置运行。这与您手动对 Auto Scaling 组进行类似更改的方式相同。

我会强烈建议,在您的测试组,创建模板就像你有生产,只调整值来降低成本例如MinSizeMaxSizeDesiredCapacity为1,等等。