我想获取 ec2 上没有终止保护的实例列表。在我编写代码来执行此操作之前,aws cli 中是否隐藏了某些内容?
答案1
从文档和我的测试来看,您正在寻找:
#aws ec2 describe-instance-attribute --instance-id <instanceid> --attribute disableApiTermination
这将返回
<instanceid> DISABLEAPITERMINATION True
如果终止保护已开启。文档指出,“如果值为 true,则您无法通过 Amazon EC2 控制台、CLI 或 API 终止实例;否则,您可以。”
您可以使用modify-instance-attribute修改该参数。所以...
#aws ec2 modify-instance-attribute --no-disable-api-termination --instance-id <instanceid>
或者
#aws ec2 modify-instance-attribute --disable-api-termination --instance-id <instanceid>
答案2
以下脚本将列出所有区域的所有实例的终止保护。它需要安装 AWS CLI,并且$PATH
:
#!/bin/bash
for region in $(aws ec2 describe-regions | grep RegionName | cut -d '"' -f 4 | sort); do
echo $region
for instance in $(aws ec2 describe-instances --region $region | grep InstanceId | cut -d '"' -f 4 | sort); do
echo -n $instance
aws ec2 describe-instance-attribute --region $region --instance-id $instance --attribute disableApiTermination | grep Value | cut -d : -f 2
done
done
如果您仅在一个区域上工作,并且已为该区域配置了 CLI,则您可以简化它并加快速度:
#!/bin/bash
for instance in $(aws ec2 describe-instances | grep InstanceId | cut -d '"' -f 4 | sort); do
echo -n $instance
aws ec2 describe-instance-attribute --instance-id $instance --attribute disableApiTermination | grep Value | cut -d : -f 2
done
第二个脚本的示例输出显示了两个实例,一个没有终止保护,一个有:
i-0123456789abcdef0 false
i-0123456789abcdef1 true