【问题标题】:Terminate a set on EC2 instances by tags using AWS CLI使用 AWS CLI 通过标签终止 EC2 实例上的集合
【发布时间】:2017-06-23 21:30:05
【问题描述】:

对 AWS 很陌生,但是我希望通过标签名称过滤使用 AWS CLI 来终止一组 ec2 实例。

如果我使用describe-instances,我可以通过 tag:key=valuefilter。对于terminate-instances,我看不到过滤方式。我认为这是可能的,因为我可以使用 AWS 控制台进行过滤和终止,但我希望通过 CLI 执行此操作。

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    最新的 AWS CLI 让您无需任何脚本或 jq:

    aws ec2 terminate-instances --instance-ids $(aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId' --filters "Name=tag:tagkey,Values=tagvalue" --output text)
    

    只要期望的实例数不是很大,上面的都可以用。

    【讨论】:

      【解决方案2】:

      terminate-instances 命令仅获取实例 ID 列表。您需要编写脚本首先运行describe-instances 命令并捕获实例ID,然后将这些ID 传递给terminate-instances 命令。

      【讨论】:

      • 啊,明白了。我可以运行aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --filters "Name=tag-value,Values=MYTAG" --output text 之类的东西来获取列表,然后在每个列表上运行终止实例。
      • 我发现 jq (stedolan.github.io/jq) 对于这类东西是必不可少的。你可以做类似INSTANCE_IDS=aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId]' --filters "Name=tag-value,Values=MYTAG" | jq .[][][]`` 然后在 aws e2 terminate-instances 命令中使用 $INSTANCE_IDS。 (我无法弄清楚如何正确格式化注释 - 应该在通过管道传输到 jq 命令的 aws 命令周围使用反引号,并将结果分配给变量)
      • 哎呀,测试了上面...在 jq 命令上使用 -r 删除 instanceid 值周围的引号。
      • // 迈克尔,你可以添加一个答案
      【解决方案3】:

      我创建了以下脚本 (.sh),它对我有用:

      aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --filters 'Name=tag-value,Values=MYTAG' --output text |
      grep stopped |
      awk '{print $2}' |
      while read line;
      do aws ec2 terminate-instances --instance-ids $line
      done
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2022-11-18
      相关资源
      最近更新 更多