如何使用 Aws CLI 获取在多个帐户下运行的所有实例的列表
我已经配置了我的个人资料,需要循环协助、承担角色,然后将输出写入文件中
干杯
答案1
我假设您已经为每个 AWS 账户配置了一个 AWS 配置文件,并且这些 AWS 配置文件允许承担具有操作的角色(这通常在和文件ec2:DescribeInstances
中配置)。~/.aws/credentials
~/.aws/config
list-instances.sh
可以编写如下脚本( )。
默认 AWS 区域版本
#!/bin/bash
AWS_PROFILES=()
AWS_PROFILES[0]=profile_for_account_1
AWS_PROFILES[1]=profile_for_account_2
AWS_PROFILES[2]=profile_for_account_3
for AWS_PROFILE in ${AWS_PROFILES[*]}
do
echo "== Profile '${AWS_PROFILE}' =="
aws ec2 describe-instances --profile "${AWS_PROFILE}" --filters Name=instance-state-code,Values=16 | jq -r '.Reservations[].Instances[].InstanceId'
done
多区域版本
#!/bin/bash
AWS_PROFILES=()
AWS_PROFILES[0]=profile_for_account_1
AWS_PROFILES[1]=profile_for_account_2
AWS_PROFILES[2]=profile_for_account_3
for AWS_PROFILE in ${AWS_PROFILES[*]}
do
for AWS_REGION in $(aws ec2 describe-regions | jq -r '.Regions[].RegionName')
do
echo "== profile: ${AWS_PROFILE}, region: ${AWS_REGION}"
aws ec2 describe-instances --profile "${AWS_PROFILE}" --region "${AWS_REGION}" --filters Name=instance-state-code,Values=16 | jq -r '.Reservations[].Instances[].InstanceId'
done
done
- 您必须具有
jq
解析 JSON 输出的命令(请参阅https://stedolan.github.io/jq/); - 如果您想要的不仅仅是 EC2 实例标识符,请随意更新 jq 表达式;
- 仅返回
--filters
中的 EC2 实例running
,请小心,因为它不会列出pending
、shutting-down
或stopping
州中的实例(请参阅instance-state-code
此处的过滤器文档https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html); - 您可以使用 将输出重定向到文件
./list-instances.sh > instance-identifiers.txt
。然后只需cat instance-identifiers.txt | grep -v "==" | cat
再次使用 循环(此处的cat
命令适用于每个 EC2 实例标识符,您可以用另一个命令替换它)。
希望这可以帮助。
巴蒂斯特