すべてのリージョンで実行中のすべてのAmazon EC2インスタンスを確認するにはどうすればよいですか?


112

異なるリージョン間でインスタンスを頻繁に切り替えます。別のリージョンから実行中のインスタンスをオフにするのを忘れることがあります。Amazonコンソールで実行中のすべてのインスタンスを表示する方法が見つかりませんでした。
リージョンに関係なく、実行中のすべてのインスタンスを表示する方法はありますか?


47
AWS GUIですべてのインスタンスを一覧表示できるだけではないという事実は、本当に非常に愚かです。
Dan Dascalescu 2017

4
理想的ではなく、明確ではありませんがResource Groups > Tag Editor、GUIオプションとして使用できます。以下の私の答えを参照してください。
ハインリッヒフィルター

3
@DanDascalescuよろしいですか?AWSは、実行中のインスタンスをオフにするのを忘れたOPのような人々からどれくらいのお金を稼いだと思いますか?
smartcaveman

2
smartcavemanとしての@DanDascalescuは、インスタンスが多くのリージョンに散らばって、Bezosの$ティッカーティックティックティックの間に忘れられた場合、それは今では馬鹿げていると言います。
Eduard Rozenberg、

2
@DanDascalescu何が実行されているかを表示しただけの場合、インスタンスを忘れたことに対して人々はどのように請求しますか?
EralpB

回答:


122

非自明なGUIオプションはResource Groups > Tag Editorです。ここでは、インスタンスにタグが付けられていなくても、すべてのリージョンのすべてのインスタンスを見つけることができます。 のスクリーンキャプチャ


編集:この画面は最近再設計され、新しい外観と「すべての地域」オプションが追加されました。


2
ありがとう、素晴らしいハック!
ロブマクドナルド

1
これは再び変わりました。このツールの「リージョン」ブロックは表示されなくなりました。代わりに、「現在の地域」のすべてが表示されます。神はそれがどこに設定されるのかを知っているだけです...私が20と500のマシンのスタッフを持っていると仮定すると、私はこれらの馬鹿にかなりうんざりしています。
ブレークポイント

1
@breakpointは、マルチリージョン検索をサポートする以前のタグエディターへのリンクを追加したように見えます。
ハインリッヒフィルター

1
これは命の恩人です!共有してくれてありがとう!:-D
ローレンス、

1
awsに「すべてのリージョン」または同様のドロップダウンが組み込まれていると
便利です

62

現在、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

ここから撮影(完全な議論を見たい場合)

また、

地域を指定する必要があります。「aws configure」を実行して地域を設定することもできます

あなたがそうすることができaws configure set region us-east-1、コメントに感謝@Sabuncuを。

更新

これで(2019年に)、4番目のフィールドにカットコマンドを適用する必要があります。 cut -f4


13
避けるためにcut、あなたが使用することができます:aws ec2 describe-regions --query Regions[*].[RegionName] --output text
stefansundin

プロファイルを使用する場合は、両方のaws ec2コマンドに--profile profile-nameを追加します。
Carlton、

このコマンドは、Windows 10 CMDで使用できます FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
Manjula

これは現在は機能していないようです-- You must specify a region. You can also configure your region by running "aws configure".リージョンを指定することは、私がやりたいことの反対であるようです
Will Sheppard

@WillSheppard最初にリージョンを設定する必要があります。例えばaws configure set region us-east-1。その後、を実行するとaws ec2 describe-regions、問題は発生しません。回答:stackoverflow.com/a/46577479/360840、および関連する質問の下の他の回答を参照してください。
Sabuncu

18

@imTachuソリューションはうまく機能します。AWSコンソールからこれを行うには...

  • AWSコンソール
  • サービス
  • ネットワーキングとコンテンツ配信
  • VPC
  • 「Running Instances」という名前のブロックを探します。これにより、現在のリージョンが表示されます
  • 下の[すべての地域を表示]リンクをクリックします

「サービス」の下に「ネットワーキングおよびコンテンツ配信」は現在ありません
ウィルシェパード

2
AWSコンソールで:[サービス]をクリックし、テキストボックスに「vpc」と入力して、VPC分離クラウドリソースを選択します
nir weiner

@Carltonに感謝します
NuoYi

彼らはそれを再び更新しました。EC2ダッシュボードにショートカットが追加されました。インスタンスセクションに移動し、[インスタンス]をクリックします。選択したリージョンで実行中のすべてのインスタンスが表示されます。
Mindfulgeek

17
  1. 最初にAWSマネジメントコンソールに移動し、リソースグループをクリックします。

    ここに画像の説明を入力してください

  2. 次に、を見つけNetwork and Content DeliveryてクリックしますVPC

    ここに画像の説明を入力してください

  3. 次に、実行中のインスタンスを見つけて展開し、すべてのリージョンを表示します。ここでは、すべてのリージョンの実行中のインスタンスをすべて見つけることができます。

    ここに画像の説明を入力してください


13

コンソールで

VPCダッシュボードhttps://console.aws.amazon.com/vpc/homeに移動し、Running instances-> をクリックしますSee all regions

ここに画像の説明を入力してください

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

8

リソースを作成するたびに、名前にタグを付けると、リソースグループを使用して、すべてのリージョンで名前タグが付いたすべてのタイプのリソースを検索できます。


手動でタグ付けに疲れた場合は、Terraformを使用してください:)
sobi3ch

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

スクリプトは、aws ec2 describe-instances各リージョン(現在は15!)に対して並行してを実行し、json出力から関連するビット(状態、タグ、アベイラビリティーゾーン)のみを抽出します。これset +mは、開始/終了時にバックグラウンドプロセスがレポートしないようにするために必要です。

出力例:

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

4

すべての解決策を読んでたくさんのことを試した後、私のために働いたのは

  1. リストアイテム
  2. リソースグループに移動
  3. タグエディター
  4. すべての地域を選択
  5. リソースタイプでEC2インスタンスを選択
  6. [リソースの検索]をクリックします

ソリューションのスナップショット


3

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( "AWSへの接続エラー、そのようなインスタンスは見つかりませんでした!");
                data.Reservations.forEach(function(reservation){
                //意図した操作を行います
      });
    }

そしてもちろん、ES6以降を自由に使用してください。

私はラムダ関数を作成して、すべてのインスタンスを任意の状態(実行、停止)で、任意のリージョンから取得します。また、インスタンスタイプやその他のさまざまなパラメーターの詳細も提供します。

スクリプトはすべてのAWSリージョンで実行さDescribeInstances()れ、インスタンスを取得するためにを呼び出し ます。

あなただけのランタイムでラムダ関数を作成する必要がありますnodejs。APIを作成して、必要に応じて使用することもできます。

さらに、AWS公式のDescribeInstances For Docsを参照して、さらに多くのオプションを探索できます。


1

すべてのAWSインスタンスを一覧表示するのに役立つオープンソーススクリプトを作成しました。https://github.com/Appnroll/aws-ec2-instances

これは、jqjson解析に使用してインスタンスをpostgreSQLデータベースに記録する1つのプロファイルのインスタンスをリストするスクリプトの一部です。

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

1

この投稿や他の場所からのさまざまなヒントに基づいた以下の私のスクリプト。スクリプトは、長いコマンドラインよりも(少なくとも私にとっては)従うのが簡単です。

スクリプトは、資格情報プロファイルが~/.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

1
まだ行っていない場合は、これらの資格情報を無効にすることをお勧めします。
チアゴ

@Thiagoに感謝しますが、これらの資格情報はとにかく偽のプレースホルダーでした:)。
Eduard Rozenberg

1

ジョブを並行して実行し、複数のプロファイルを使用するには、このスクリプトを使用します。

#!/ bin / bash
プロファイル1プロファイル2のi
行う
    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
    `aws --profile $ i ec2 describe-regions --output text | カット-f4`
    行う
        tput setaf 1; echo "リージョン$ regionのインスタンスの一覧表示"; tput sgr0
        aws ec2 describe-instances --query 'Reservations [*]。Instances [*]。[Tags [?Key == `Name`] .Value、InstanceId]' --profile $ i --region $ region --output text
    完了&
できた
待つ

スクリーンショット:

スクリーンショット


0

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

0

クラウドリソースを列挙するために設計されたCLIツールを使用できます(クロスリージョンおよびクロスアカウントスキャン)-https://github.com/scopely-devops/skew

短い設定の後、次のコードを使用して、すべてのUS AWSリージョンのすべてのインスタンスをリストできます(123456789012がAWSアカウント番号であると想定)。

from skew import scan

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

0

AWSリソースCRUDするための優れたツール。すべての地域で[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]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.