【发布时间】:2013-10-13 15:30:22
【问题描述】:
我想知道是否有一种简单的方法或最佳实践来确保 AutoScaling 组中的所有实例都已使用该 AutoScaling 组的当前启动配置启动。
举个例子,假设一个名为 www-asg 的自动扩展组有 4 个所需的实例在 ELB 后面运行网络服务器。我想更改用于启动此自动扩展组实例的 AMI 或用户数据。所以我创建了一个新的启动配置www-cfg-v2 并更新www-asg 以使用它。
# create new launch config
as-create-launch-config www-cfg-v2 \
--image-id 'ami-xxxxxxxx' --instance-type m1.small \
--group web,asg-www --user-data "..."
# update my asg to use new config
as-update-auto-scaling-group www-asg --launch-configuration www-cfg-v2
到目前为止,所有 4 个正在运行的实例仍使用旧的启动配置。我想知道是否有一种简单的方法可以用新实例替换所有正在运行的实例来强制执行新配置,但始终确保最少的实例保持运行。
我目前的实现方式如下..
- 保存给定自动缩放组的当前运行实例列表
- 暂时增加所需实例的数量 +1
- 等待新实例可用
-
通过终止列表中的一个实例
as-terminate-instance-in-auto-scaling-group i-XXXX \ --no-decrement-desired-capacity --force 等待替换实例可用
- 如果剩下 1 个以上的实例,则重复 4 个。
-
通过
从列表中终止最后一个实例as-terminate-instance-in-auto-scaling-group i-XXXX \ --decrement-desired-capacity --force 完成,所有实例现在应该使用相同的启动配置运行
我已经大部分自动化了这个过程,但我觉得必须有一些更好的方法来实现相同的目标。有人知道更好更有效的方法吗?
数学
在官方AWS EC2 Forum也发了这个问题。
【问题讨论】:
-
只是想知道,您是否找到了另一种方法?我所做的几乎与您上面描述的完全相同。
-
@CocoaNoob: 不......但我现在还没有改变启动配置安静的一段时间。但这是我为滚动更改编写的脚本:gist.github.com/muhqu/76264d73d42edbb75263
-
@muhqu 你找到了另一种方法吗?
-
@froi 没有。仍然按照我写的那样做...... :-(
标签: amazon-web-services amazon-ec2 autoscaling