我想知道如何使用该AutoScaling组的当前启动配置启动AutoScaling组中的所有实例的简单方法或最佳实践 .
举一个例子,假设一个名为 www-asg
的自动缩放组,其中4个所需实例在ELB后面运行Web服务器 . 我想更改用于启动此自动缩放组实例的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个正在运行的实例仍使用旧的启动配置我想知道是否有一种简单的方法可以用新实例替换所有正在运行的实例来强制执行新配置, but 始终确保最少的实例保持运行 .
我目前的实现方式如下 .
-
保存给定自动缩放组的当前运行实例列表
-
暂时增加所需实例的数量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发布了这个问题 .
2 回答
这并没有太大的不同,但你可以:
创建新的LC
使用新LC创建新的ASG
缩小旧ASG
删除旧的asg和LC
我以这种方式进行部署,根据我的经验,从一个ASG滚动到另一个ASG,而不是必须来回跳转 . 但正如我所指出的,这并不是一个巨大的差异 .
可能值得一看:https://github.com/Netflix/asgard,这是一个用于管理自动缩放组的Netflix OSS工具 . 我最终没有使用它,但它仍然非常有趣 .
老问题我知道,但我想我会分享我的方法 .
我更改了ASG的启动配置,然后启动与ASG中当前相同数量的实例,因为它们可以(自动测试)连接到ASG . 一旦添加了机器,我们的部署系统就会更新我们的清漆负载均衡器以使用新实例并终止旧实例 .
以上所有都是自动化的,完整的站点缩放切换大约需要5分钟,具体取决于启动时间 .
如果您想知道,我们使用SNS来处理添加或删除实例时的更新清单,或者在我们的负载均衡器扩展(几乎从未发生过)的情况下,部署系统将更新我们的route53配置 .
我认为这几乎涵盖了一切