ChatGPT解决这个技术问题 Extra ChatGPT

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

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

不理想且绝对不明显,但您可以使用 Resource Groups > Tag Editor 作为 GUI 选项。请看下面我的回答。
@DanDascalescu 你确定吗?你认为 AWS 从像 OP 这样忘记关闭正在运行的实例的人那里赚了多少钱?
@DanDascalescu 正如 smartcaveman 所说,如果实例散布在许多地区并被遗忘,而贝佐斯的 $ticker 滴答滴答滴答作响,那就太愚蠢了。
@DanDascalescu 如果他们只是展示正在运行的内容,他们将如何向人们收取忘记实例的费用..?

m
mega6382

2021 年 11 月编辑:AWS 最近推出了 Amazon EC2 Global View,初步支持实例、VPC、子网、安全组和卷。

有关详细信息,请参阅 announcementdocumentation

https://i.stack.imgur.com/3ain0.png


@breakpoint 看起来他们现在添加了指向支持多区域搜索的先前标签编辑器的链接。
赞赏,海因里希;将审查。
伙计,这是一个救生员!感谢分享! :-D
如果 aws 有一个内置的“所有区域”或类似的下拉菜单,那就太好了
@user5783745 屏幕最近已更新,现在有一个“所有区域”选项
i
imTachu

我认为您目前无法在 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

取自 here(如果您想查看完整的讨论)

另外,如果你得到一个

您必须指定一个区域。您还可以通过运行“aws configure”来配置您的区域

您可以使用 aws configure set region us-east-1 执行此操作,感谢 @Sabuncu 的评论。

更新

现在(2019 年)应该在第 4 个字段上应用剪切命令:cut -f4


为避免 cut,您可以使用:aws ec2 describe-regions --query Regions[*].[RegionName] --output text
如果使用配置文件,请将 --profile profile-name 添加到两个 aws ec2 命令。
您可以在 Windows 10 CMD 上使用此命令,FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
这现在似乎不起作用 - You must specify a region. You can also configure your region by running "aws configure". - 似乎指定一个区域与我想要做的相反
@WillSheppard 您必须先配置您的区域;例如aws configure set region us-east-1。然后,当您运行 aws ec2 describe-regions 时,您应该没有问题。请参阅答案:stackoverflow.com/a/46577479/360840 以及相关问题下的其他答案。
s
sobi3ch

在控制台中

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

https://i.stack.imgur.com/J2YKK.png

在 CLI 中

例如将此添加到 .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
}

示例输出:

$ 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'..

在 2021 年,这种 VPC 管理控制台方式是我查找所有运行 EC2 实例的区域的最佳方式。谢谢sobi3ch。
G
GorvGoyl

首先转到 AWS 管理控制台并单击资源组:然后找到网络和内容交付并单击 VPC:然后找到正在运行的实例并展开查看所有区域。在这里您可以找到所有区域的所有正在运行的实例:


此菜单已更改。我找不到正在运行的实例。
C
Carlton

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

AWS 控制台

服务

网络和内容交付

专有网络

查找名为“Running Instances”的块,这将显示当前区域

点击下方的“查看所有地区”链接


现在“服务”下没有“网络和内容交付”
在 AWS 控制台中:单击“服务”> 在文本框中键入“vpc”,然后选择 VPC 隔离云资源
他们再次更新了它。 EC2 仪表板中现在有一个快捷方式。转到实例部分并单击“实例”。它将向您显示所选区域中的所有正在运行的实例。
对不起,威尔 - 它就在那里!但是您可以直接访问 VPC。 Mindfulgeek - 您错过了重点:EC2 中始终存在“按区域”,但 OP 希望查看所有区域。 VPC方法可以让您查看是否有跨区域的
M
Mallikarjuna Reddy

每次创建资源时,使用名称标记它,现在您可以使用资源组在所有区域中查找具有名称标记的所有类型的资源。


这是做到这一点的方法。没有疯狂的循环或多个查询。资源组将为您整理所有内容!
R
Rahul Talreja

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

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

https://i.stack.imgur.com/zvO5H.png


h
hansaplast

基于 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

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

示例输出:

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

J
J. Parashar

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

此外,您还可以:

通过 Lambda 和 Cloud watch 实现自动化。

使用 Lambda 和 api 网关创建 api 端点并在您的代码中使用它

NodeJS 中的一个示例:

创建区域(端点)数组。 [也可以使用 AWS describeRegions() ]

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 函数中,可以调用 DescribeInstances()。

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 函数来获取处于任何状态 [运行、停止] 和来自任何区域的所有实例,还将提供有关实例类型和各种其他参数的详细信息。

The Script 跨所有 AWS 区域运行并调用 DescribeInstances() 以获取实例。

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

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


您必须实际阅读链接代码才能有意义github.com/jparasha/Get_All_Ec2_Instances_Across_All_Regions/…
E
Eduard Rozenberg

下面是我的脚本,基于这篇文章和其他地方的各种提示。该脚本比长命令行更容易理解(至少对我而言)。

该脚本假定凭证配置文件存储在文件 ~/.aws/credentials 中,类似于:

[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar

[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar

脚本:

#!/usr/bin/env bash

#------------------------------------#
# Script to display AWS EC2 machines #
#------------------------------------#

# NOTES:
# o Requires 'awscli' tools (for ex. on MacOS: $ brew install awscli)
# o AWS output is tabbed - we convert to spaces via 'column' command


#~~~~~~~~~~~~~~~~~~~~#
# Assemble variables #
#~~~~~~~~~~~~~~~~~~~~#

regions=$(aws ec2 describe-regions --output text | cut -f4 | sort)

query_mach='Reservations[].Instances[]'
query_flds='PrivateIpAddress,InstanceId,InstanceType'
query_tags='Tags[?Key==`Name`].Value[]'
query_full="$query_mach.[$query_flds,$query_tags]"


#~~~~~~~~~~~~~~~~~~~~~~~~#
# Output AWS information #
#~~~~~~~~~~~~~~~~~~~~~~~~#

# Iterate through credentials profiles
for profile in 'default' 'work'; do

    # Print profile header
    echo -e "\n"
    echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
    echo -e "Credentials profile:'$profile'..."
    echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

    # Iterate through all regions
    for region in $regions; do

        # Print region header
        echo -e "\n"
        echo -e "Region: $region..."
        echo -e "--------------------------------------------------------------"

        # Output items for the region
        aws ec2 describe-instances    \
          --profile $profile          \
          --region  $region           \
          --query   $query_full       \
          --output  text              \
          | sed     's/None$/None\n/' \
          | sed     '$!N;s/\n/ /'     \
          | column  -t -s $'\t'

    done
done

如果您还没有这样做,我建议您使这些凭据无效。
@Thiago 谢谢,但这些凭据无论如何都是虚假的占位符:)。
o
once

用于打印所有区域中所有实例 ID 的快速 bash oneliner 命令:

$ 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
...

s
sobi3ch

AWS 最近推出了 Amazon EC2 Global View,初步支持实例、VPC、子网、安全组和卷。

要查看所有正在运行的实例,请转到 EC2 或 VPC 控制台并单击左上角的 EC2 Global View

https://i.stack.imgur.com/JvwZy.png

然后点击 Global Search 标签并按 Resource type 过滤并选择 Instance。不幸的是,这将显示所有状态的实例:

pending
running
stopping
stopped
shutting-down
terminated

https://i.stack.imgur.com/b2gs3.png


t
tuhaj

我创建了一个开源脚本,可以帮助您列出所有 AWS 实例。 https://github.com/Appnroll/aws-ec2-instances

这是脚本的一部分,它列出了一个配置文件的实例,将它们记录到 postgreSQL 数据库中,并使用 jq 进行 json 解析:

DATABASE="aws_instances"
TABLE_NAME="aws_ec2"
SAVED_FIELDS="state, name, type, instance_id, public_ip, launch_time, region, profile, publicdnsname"
# collects the regions to display them in the end of script
REGIONS_WITH_INSTANCES=""

for region in `aws ec2 describe-regions --output text | cut -f3`
do
   # this mappping depends on describe-instances command output
   INSTANCE_ATTRIBUTES="{
        state: .State.Name,
        name: .KeyName, type: .InstanceType,
        instance_id: .InstanceId,
        public_ip: .NetworkInterfaces[0].Association.PublicIp,
        launch_time: .LaunchTime,
        \"region\": \"$region\",
        \"profile\": \"$AWS_PROFILE\",
        publicdnsname: .PublicDnsName
   }"

   echo -e "\nListing AWS EC2 Instances in region:'$region'..."
   JSON=".Reservations[] | ( .Instances[] | $INSTANCE_ATTRIBUTES)"
   INSTANCE_JSON=$(aws ec2 describe-instances --region $region)

   if echo $INSTANCE_JSON | jq empty; then
      # "Parsed JSON successfully and got something other than false/null"
      OUT="$(echo $INSTANCE_JSON | jq $JSON)"

      # check if empty
      if [[ ! -z "$OUT" ]] then
        for row in $(echo "${OUT}" | jq -c "." ); do
          psql -c "INSERT INTO $TABLE_NAME($SAVED_FIELDS) SELECT $SAVED_FIELDS from json_populate_record(NULL::$TABLE_NAME, '${row}') ON CONFLICT (instance_id)
            DO UPDATE
            SET state = EXCLUDED.state,
            name = EXCLUDED.name,
            type = EXCLUDED.type,
            launch_time = EXCLUDED.launch_time,
            public_ip = EXCLUDED.public_ip,
            profile = EXCLUDED.profile,
            region = EXCLUDED.region,
            publicdnsname = EXCLUDED.publicdnsname
            " -d $DATABASE
        done

        REGIONS_WITH_INSTANCES+="\n$region"
      else
        echo "No instances"
      fi
   else
        echo "Failed to parse JSON, or got false/null"
   fi
done

A
Akhil

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

#!/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

截屏:

https://i.stack.imgur.com/rRUUe.png


A
Alistair R

不确定此选项已存在多长时间,但您可以通过搜索 EC2 Global View 查看所有内容的全局视图

https://console.aws.amazon.com/ec2globalview/home#

https://i.stack.imgur.com/erFlE.png


D
Duncan Bayne

使用 bash-my-aws

region-each instances

P
Pawel

基于@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}"
)

D
Dmytro

您可以使用专为枚举云资源(跨区域和跨帐户扫描)而设计的 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)

R
Rafal

CRUD AWS resources 的好工具。在所有区域中查找 [EC2|RDS|IAM..]。可以对过滤器结果执行操作(停止|运行|终止)。

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]

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅