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


当前回答

基于@hansaplast代码,我创建了支持多个配置文件作为参数的Windows友好版本。只需将该文件保存为cmd或bat文件。您还需要有jq命令。

@echo off 
setlocal enableDelayedExpansion

set PROFILE=%1
IF "%1"=="" (SET PROFILE=default)

echo checkin instances in all regions for %PROFILE% account
FOR /F "tokens=* USEBACKQ" %%F IN (`aws ec2 describe-regions --query Regions[*].[RegionName] --output text --profile %PROFILE%`) DO (
echo === region: %%F
aws ec2 describe-instances --region %%F --profile %PROFILE%| jq ".Reservations[].Instances[] | {type: .InstanceType, state: .State.Name, tags: .Tags, zone: .Placement.AvailabilityZone}"
)

其他回答

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

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

基于imTachus的答案,但更少的啰嗦,加上更快。您需要安装jq和aws-cli。

set +m
for region in $(aws ec2 describe-regions --query "Regions[*].[RegionName]" --output text); do 
  aws ec2 describe-instances --region "$region" | jq ".Reservations[].Instances[] | {type: .InstanceType, state: .State.Name, tags: .Tags, zone: .Placement.AvailabilityZone}" &
done; wait; set -m

该脚本为每个区域(现在是15个!)并行运行aws ec2 description -instances,并仅从json输出中提取相关的位(状态、标签、可用分区)。需要set +m,以便后台进程在启动/结束时不报告。

示例输出:

{
  "type": "t2.micro",
  "state": "stopped",
  "tags": [
    {
      "Key": "Name",
      "Value": "MyEc2WebServer"
    },
  ],
  "zone": "eu-central-1b"
}

您可以跨所有区域运行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官方文档用于描述实例,以探索更多选项。

@imTachu解决方案效果很好。要通过AWS控制台做到这一点…

AWS控制台 服务 网络和内容交付 VPC 寻找一个名为“Running Instances”的块,这将显示您当前的区域 点击下方的“查看所有区域”链接

CRUD AWS资源的好工具。找到(EC2 | RDS |我. .]在所有地区。可以对过滤结果执行操作(stop|run|terminate)。

python3 awsconsole.py ec2 all // return list of all instances
python3 awsconsole.py ec2 all -r eu-west-1
python3 awsconsole.py ec2 find -i i-0552e09b7a54fa2cf --[terminate|start|stop]