Auto Scaling Group启动配置更改

muh*_*hqu 11 amazon-ec2 amazon-web-services autoscaling

我想知道如何使用该AutoScaling组的当前启动配置启动AutoScaling组中的所有实例的简单方法或最佳实践.

举一个例子,想象一个自动扩展组,调用www-asg4个在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
Run Code Online (Sandbox Code Playgroud)

到目前为止,所有4个正在运行的实例仍使用旧的启动配置 我想知道是否有一种简单的方法可以用新实例替换所有正在运行的实例来强制执行新配置,始终确保最少的实例保持运行.

我目前的实现方式如下.

  1. 保存给定自动缩放组的当前运行实例列表
  2. 暂时增加所需实例的数量+1
  3. 等待新实例可用
  4. 通过从列表中终止一个实例

    as-terminate-instance-in-auto-scaling-group i-XXXX \
        --no-decrement-desired-capacity --force
    
    Run Code Online (Sandbox Code Playgroud)
  5. 等待替换实例可用

  6. 如果剩下多于1个实例,则重复4.
  7. 通过列表终止最后一个实例

    as-terminate-instance-in-auto-scaling-group i-XXXX \
        --decrement-desired-capacity --force
    
    Run Code Online (Sandbox Code Playgroud)
  8. 完成后,所有实例现在应该使用相同的启动配置运行

我主要是自动执行此程序,但我觉得必须有一些更好的方法来实现相同的目标.谁知道更有效的方式?

马蒂亚斯

也在官方AWS EC2论坛上发布了这个问题.

Pet*_*ter 1

这没有太大不同,但您可以:

  1. 创建新的 LC
  2. 使用新 LC 创建新 ASG
  3. 缩小旧 ASG 规模
  4. 删除旧的asg和LC

我以这种方式进行部署,根据我的经验,可以从一个 ASG 滚动到另一个 ASG,而不必来回跳转。但正如我所指出的,这并不是一个巨大的差异。

可能值得一看: https: //github.com/Netflix/asgard,这是一个用于管理自动缩放组的 Netflix OSS 工具。我最终没有使用它,但它仍然非常有趣。