【问题标题】:How to delete autoscaling groups with aws cli?如何使用 aws cli 删除自动缩放组?
【发布时间】:2022-02-03 17:49:27
【问题描述】:

我正在尝试编写一个 bash 脚本来删除我的 EC2 实例和启动它们的 Auto Scaling 组:

EC2s=$(aws ec2 describe-instances --region=eu-west-3 \
  --filters "Name=tag:Name,Values=*-my-dev-eu-west-3" \
  --query "Reservations[].Instances[].InstanceId" \
  --output text)
for id in $EC2s
do
  aws ec2 terminate-instances --region=eu-west-3 --instance-ids $id
done
aws autoscaling delete-auto-scaling-group --region eu-west-3 \
  --auto-scaling-group-name my-asg-dev-eu-west-3

但它失败并出现此错误:

An error occurred (ResourceInUse) when calling the DeleteAutoScalingGroup operation:
You cannot delete an AutoScalingGroup while there are instances or pending Spot 
instance request(s) still in the group.

如果我使用 AWS 控制台做同样的事情,没有问题。如果我终止了所有实例,为什么 aws cli 会阻止我删除 ASG?

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    如果您真的想使用 CLI 执行此操作,您可能首先需要使用 aws autoscaling suspend-processes 命令来阻止 ASG 创建新实例。然后像你一样使用aws ec2 terminate-instances。然后使用aws ec2 wait instance-terminated 命令并传递实例ID。完成所有操作后,您应该可以使用aws autoscaling delete-auto-scaling-group

    【讨论】:

      【解决方案2】:

      aws ec2 terminate-instances 将在实例完成终止之前返回(可能需要几分钟)。

      我强烈建议使用 CloudFormation 或 Terraform 之类的东西来代替 AWS CLI 工具。

      【讨论】:

      • 具有讽刺意味的是,我正在编写此脚本以在 terraform 运行失败后进行清理。我想让我的环境恢复到 terraform 之前的状态。
      • 这就是terraform destroy 的用途。你为什么要重新发明它?
      • 我在一个开发环境中工作,人们在 AWS 控制台中对 AWS 基础设施进行更改并且状态文件不同步,所以我只想清除所有内容并从头开始。跨度>
      • 已经有工具可以做到这一点:github.com/rebuy-de/aws-nuke
      【解决方案3】:

      您可以使用 AWS cli 强制删除具有活动 Spot 实例请求的 ASG:

      aws autoscaling delete-auto-scaling-group --auto-scaling-group-name Your-ASG-Name --force-delete
      

      【讨论】:

        猜你喜欢
        • 2022-01-11
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 2015-10-24
        • 2014-05-06
        • 1970-01-01
        • 2018-06-19
        相关资源
        最近更新 更多