如何在所有地区查看所有正在运行的Amazon EC2实例?

Jer*_*yal 75 amazon-ec2 amazon-web-services ec2-ami

我经常在不同区域之间切换实例,有时我忘记关闭来自不同区域的运行实例.我找不到任何方法来查看亚马逊控制台上的所有正在运行的实例.
有没有办法显示所有正在运行的实例而不管区域?

Hei*_*ter 77

编辑:正如@breakpoint在评论中指出的那样,标签编辑器似乎已更新并且删除了跨区域搜索功能: - /

如果我找到替代方案,我会更新这个.


一个非显而易见的GUI选项是Resource Groups > Tag Editor.在这里,您可以查找所有区域中的所有实例,即使实例未标记. 在此输入图像描述

  • 这又发生了变化。我不再在此工具中看到“区域”块。相反,它只显示“当前区域”中的所有内容。上帝只知道那是在哪里设置的……假设我有 20 台和 500 台机器的员工,我对这些白痴感到非常厌烦。 (4认同)
  • 如果 aws 有一个内置的“所有区域”或类似的下拉菜单,那就太好了 (2认同)
  • @user5783745 屏幕最近已更新,现在有“所有区域”选项 (2认同)

imT*_*chu 53

我认为您目前无法在AWS GUI中执行此操作.但是这里有一种方法可以使用AWS CLI列出所有区域中的所有实例:

for region in `aws ec2 describe-regions --region us-east-1 --output text | cut -f4`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region
done
Run Code Online (Sandbox Code Playgroud)

这里采取(如果你想看到完整的讨论)

  • 为了避免`cut`,你可以使用:`aws ec2 describe-regions --query Regions [*].[RegionName] - output text (10认同)

sob*_*3ch 52

在控制台中

转到 VPC 仪表板https://console.aws.amazon.com/vpc/home并单击Running instances-> See all regions

在此处输入图片说明

在命令行界面

例如,将此添加到.bashrc. 重新加载source ~/.bashrc并运行它

注意:除了aws CLI你需要安装jq

function aws.print-all-instances() {
  REGIONS=`aws ec2 describe-regions --region us-east-1 --output text --query Regions[*].[RegionName]`
  for REGION in $REGIONS
  do
    echo -e "\nInstances in '$REGION'..";
    aws ec2 describe-instances --region $REGION | \
      jq '.Reservations[].Instances[] | "EC2: \(.InstanceId): \(.State.Name)"'
  done
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

$ aws.print-all-instances 

Listing Instances in region: 'eu-north-1'..
"EC2: i-0548d1de00c39f923: terminated"
"EC2: i-0fadd093234a1c21d: running"

Listing Instances in region: 'ap-south-1'..

Listing Instances in region: 'eu-west-3'..

Listing Instances in region: 'eu-west-2'..

Listing Instances in region: 'eu-west-1'..

Listing Instances in region: 'ap-northeast-2'..

Listing Instances in region: 'ap-northeast-1'..

Listing Instances in region: 'sa-east-1'..

Listing Instances in region: 'ca-central-1'..

Listing Instances in region: 'ap-southeast-1'..

Listing Instances in region: 'ap-southeast-2'..

Listing Instances in region: 'eu-central-1'..

Listing Instances in region: 'us-east-1'..

Listing Instances in region: 'us-east-2'..

Listing Instances in region: 'us-west-1'..

Listing Instances in region: 'us-west-2'..
Run Code Online (Sandbox Code Playgroud)

  • 在 2021 年,这种 VPC 管理控制台方式是我查找正在运行 EC2 实例的所有区域的最佳方式。谢谢索比3ch。 (3认同)

Car*_*ton 11

@imTachu解决方案效果很好.要通过AWS控制台执行此操作...

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

  • 在 AWS 控制台中:单击“服务”> 在文本框中键入“vpc”,然后选择 VPC-isolated cloud resources (2认同)

Mal*_*ddy 7

每次创建资源时,都要使用名称对其进行标记,现在您可以使用" 资源组"查找所有区域中具有名称标记的所有类型的资源.


han*_*ast 7

基于imTachus的答案,但更简洁,加快.您需要安装jqaws-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
Run Code Online (Sandbox Code Playgroud)

该脚本aws ec2 describe-instances为每个区域并行运行(现在为15!),并从json输出中仅提取相关位(状态,标记,可用区).这set +m是必需的,因此后台进程在开始/结束时不报告.

示例输出:

{
  "type": "t2.micro",
  "state": "stopped",
  "tags": [
    {
      "Key": "Name",
      "Value": "MyEc2WebServer"
    },
  ],
  "zone": "eu-central-1b"
}
Run Code Online (Sandbox Code Playgroud)


小智 7

在阅读了所有解决方案并尝试了很多东西之后,对我有用的是-

  1. 项目清单
  2. 转到资源组
  3. 标签编辑器
  4. 选择所有地区
  5. 在资源类型中选择 EC2 实例
  6. 点击搜索资源

解决方案截图


rdh*_*dar 6

  1. 首先转到AWS管理控制台,然后单击资源组:

    在此处输入图片说明

  2. 然后找到Network and Content Delivery并单击VPC

    在此处输入图片说明

  3. 然后找到正在运行的实例并展开查看所有区域。在这里,您可以找到所有区域的所有正在运行的实例:

    在此处输入图片说明


J. *_*har 5

你可以DescribeInstances()跑遍所有地区。

此外,您可以:

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

NodeJS 中的一个示例:

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函数中,DescribeInstances()可以被调用。
函数 getInstances(region) {
            EC2.describeInstances(params, function(err, data) {
                if (err) return console.log("连接AWS时出错,找不到这样的实例!");
                data.Reservations.forEach(function(reservation) {
                //做任何想要的操作
      });
    }

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

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

该脚本在所有 AWS 区域中运行并调用 DescribeInstances(),以获取实例。

您只需要创建一个带有 run-time 的 lambda 函数nodejs。您甚至可以从中创建 API 并在需要时使用它。

此外,您可以查看关于DescribeInstances 的AWS 官方文档以探索更多选项。