我经常在不同的区域之间切换实例,有时我忘记从不同的区域关闭正在运行的实例。我找不到任何方法来查看Amazon主机上所有正在运行的实例。 是否有任何方法可以显示所有正在运行的实例而不考虑区域?


当前回答

要并行运行作业并使用多个概要文件,请使用此脚本。

#!/bin/bash
for i in profile1 profile2
do
    OWNER_ID=`aws iam get-user --profile $i --output text | awk -F ':' '{print $5}'`
    tput setaf 2;echo "Profile : $i";tput sgr0
    tput setaf 2;echo "OwnerID : $OWNER_ID";tput sgr0
    for region in `aws --profile $i ec2  describe-regions --output text | cut -f4`
    do
        tput setaf 1;echo  "Listing Instances in region $region";tput sgr0
        aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value , InstanceId]' --profile $i --region $region --output text
    done &
done
wait

截图:

其他回答

您可以跨所有区域运行descripbeinstances()。

此外,你可以:

通过Lambda和Cloud watch实现自动化。 使用Lambda和api网关创建api端点,并在代码中使用它

NodeJS中的示例:

创建一个区域(端点)数组。[也可以使用AWS描述区域()]

var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1', 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', 'ap-northeast-2'];

    regionNames.forEach(function(region) {
        getInstances(region);
    });

然后,在getInstances函数中,descripbeinstances()可以是 调用。

function getInstances(region) {
            EC2.describeInstances(params, function(err, data) {
                if (err) return console.log("Error connecting to AWS, No Such Instance Found!");
                data.Reservations.forEach(function(reservation) {
                //do any operation intended
      });
    }

当然,你可以随意使用ES6及以上版本。

我写了一个lambda函数来获得任何状态[正在运行,停止]和任何区域的所有实例,还将给出关于实例类型和各种其他参数的详细信息。

脚本在所有AWS区域运行,并调用descripbeinstances()来获取实例。

你只需要用运行时的nodejs创建一个lambda函数。 您甚至可以从中创建API,并在需要时使用它。

此外,您可以查看AWS官方文档用于描述实例,以探索更多选项。

一个快速bash onlineer命令,打印所有区域的所有实例id:

$ aws ec2 describe-regions --query "Regions[].{Name:RegionName}" --output text |xargs -I {} aws ec2 describe-instances --query Reservations[*].Instances[*].[InstanceId] --output text --region {}

# Example output
i-012344b918d75abcd
i-0156780dad25fefgh
i-0490122cfee84ijkl
...

使用bash-my-aws:

region-each instances

在阅读了所有的解决方案并尝试了一堆东西之后,对我有效的一个是-

列表项 进入资源组 标签编辑器 选择所有区域 在资源类型中选择“EC2实例” 单击“搜索资源”

您可以使用cli的云资源枚举工具(跨地区、跨账号扫描)- https://github.com/scopely-devops/skew

经过简单配置后,您可以使用以下代码列出所有美国AWS区域中的所有实例(假设123456789012是您的AWS帐号)。

from skew import scan

arn = scan('arn:aws:ec2:us-*:123456789012:instance/*')
for resource in arn:
    print(resource.data)