AWS CLI 获取实例列表

AWS CLI 获取实例列表

如何使用 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,请小心,因为它不会列出pendingshutting-downstopping州中的实例(请参阅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 实例标识符,您可以用另一个命令替换它)。

希望这可以帮助。

巴蒂斯特

相关内容