Bagaimana cara melihat semua instans Amazon EC2 yang berjalan di semua wilayah?

113

Saya sering berpindah instans di antara kawasan yang berbeda dan terkadang saya lupa mematikan instans saya yang sedang berjalan dari kawasan yang berbeda. Saya tidak dapat menemukan cara apa pun untuk melihat semua contoh yang berjalan di konsol Amazon.
Apakah ada cara untuk menampilkan semua instans yang berjalan terlepas dari wilayahnya?

JerryGoyal
sumber
47
Fakta bahwa AWS GUI tidak hanya membiarkan Anda mendaftar semua contoh benar-benar bodoh.
Dan Dascalescu
4
Tidak ideal dan jelas tidak jelas tetapi Anda dapat menggunakan Resource Groups > Tag Editorsebagai opsi GUI. Lihat jawaban saya di bawah.
Filter Heinrich
3
@DanDascalescu apakah Anda yakin? Menurut Anda, berapa banyak uang yang dihasilkan AWS dari orang-orang seperti OP yang lupa mematikan instans yang sedang berjalan?
smartcaveman
2
@DanDascalescu sebagai smartcaveman mengatakan itu sekarang bodoh jika contoh tersebar di banyak wilayah dan dilupakan sementara tanda centang $ ticker berdetak untuk Bezos.
Eduard Rozenberg
2
@DanDascalescu bagaimana mereka akan menagih orang karena lupa contoh jika mereka hanya menunjukkan apa yang sedang berjalan ..?
EralpB

Jawaban:

124

Opsi GUI yang tidak jelas adalah Resource Groups > Tag Editor. Di sini Anda dapat menemukan semua instance di semua wilayah, meskipun instance tersebut tidak diberi tag. Tangkapan layar dari


EDIT: Layar ini baru saja didesain ulang dan sekarang memiliki tampilan baru dan opsi "Semua wilayah".

Filter Heinrich
sumber
2
Terima kasih, hack hebat!
Rob MacDonald
1
Ini telah berubah lagi. Saya tidak lagi melihat blok "Wilayah" di alat ini. Sebaliknya, itu hanya menunjukkan semua yang ada di "Wilayah Saat Ini". Hanya Tuhan yang tahu di mana hal itu diatur ... Saya mulai muak dengan para idiot ini dengan asumsi saya memiliki staf dua puluh dan 500 mesin.
breakpoint
1
@breakpoint sepertinya mereka sekarang menambahkan kembali tautan ke Editor Tag sebelumnya yang mendukung pencarian multiwilayah.
Filter Heinrich
1
Sobat, ini adalah penyelamat hidup! Terima kasih telah berbagi! :-D
Lawrence
1
Akan lebih bagus jika aws memiliki built-in drop-down untuk 'semua-wilayah' atau serupa
stevec
62

Saya rasa Anda saat ini tidak dapat melakukan ini di AWS GUI. Namun berikut adalah cara untuk mencantumkan semua instans Anda di semua wilayah dengan 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

Diambil dari sini (Jika ingin melihat pembahasan lengkapnya)

Juga, jika Anda mendapatkan file

Anda harus menentukan wilayah. Anda juga dapat mengonfigurasi wilayah Anda dengan menjalankan "aws configure"

Anda dapat melakukannya dengan aws configure set region us-east-1, terima kasih @Sabuncu atas komentarnya.

Memperbarui

Sekarang (pada 2019) perintah cut harus diterapkan di bidang ke-4: cut -f4

imTachu
sumber
13
Untuk menghindarinya cut, Anda dapat menggunakan:aws ec2 describe-regions --query Regions[*].[RegionName] --output text
stefansundin
Jika menggunakan profil, tambahkan --profile profile-name ke kedua perintah aws ec2.
Carlton
Anda dapat menggunakan perintah ini pada Windows 10 CMD, FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
Manjula
Ini sepertinya tidak berhasil sekarang - You must specify a region. You can also configure your region by running "aws configure".- sepertinya menentukan wilayah adalah kebalikan dari apa yang ingin saya lakukan
Will Sheppard
@WillSheppard Anda harus terlebih dahulu mengkonfigurasi wilayah Anda; mis aws configure set region us-east-1. Kemudian, saat Anda berlari aws ec2 describe-regions, seharusnya tidak ada masalah. Silakan lihat jawaban: stackoverflow.com/a/46577479/360840 serta jawaban lain di bawah pertanyaan terkait.
Sabuncu
19

Solusi @imTachu bekerja dengan baik. Untuk melakukan ini melalui konsol AWS ...

  • Konsol AWS
  • Jasa
  • Jaringan & Pengiriman Konten
  • VPC
  • Cari blok bernama "Running Instances", ini akan menunjukkan wilayah saat ini
  • Klik tautan "Lihat semua wilayah" di bawahnya
Carlton
sumber
Tidak ada "Jaringan & Pengiriman Konten" di bawah "Layanan" sekarang
Will Sheppard
2
di konsol AWS: klik 'layanan'> di kotak teks ketik 'vpc' dan kemudian pilih VPC- sumber daya cloud yang terisolasi
nir weiner
bekerja dengan baik @Carlton terima kasih
NuoYi
Mereka telah memperbaruinya lagi. Sekarang ada jalan pintas di dasbor EC2. Buka bagian instance dan klik "instance". Ini akan menunjukkan kepada Anda semua contoh yang berjalan di wilayah yang dipilih.
Mindfulgeek
17
  1. Pertama, buka konsol Manajemen AWS dan klik grup Sumber daya:

    masukkan deskripsi gambar di sini

  2. Kemudian cari Network and Content Deliverydan klik VPC:

    masukkan deskripsi gambar di sini

  3. Kemudian temukan Instans berjalan dan perluas lihat semua wilayah. Di sini Anda dapat menemukan semua instance yang berjalan dari semua wilayah:

    masukkan deskripsi gambar di sini

Md Riadul Islam
sumber
13

Di Konsol

Buka dasbor VPC https://console.aws.amazon.com/vpc/homedan klik Running instances-> See all regions.

masukkan deskripsi gambar di sini

Di CLI

Tambahkan ini misalnya ke .bashrc. Muat ulang source ~/.bashrc, dan jalankan

Catatan: Kecuali untuk aws CLI Anda perlu menginstal 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
}

Contoh keluaran:

$ 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'..
sobi3ch.dll
sumber
8

Setiap kali Anda membuat sumber daya, beri tag dengan nama dan sekarang Anda dapat menggunakan Grup Sumber Daya untuk menemukan semua jenis sumber daya dengan tag nama di semua wilayah.

Mallikarjuna Reddy
sumber
Jika Anda lelah menandai secara manual gunakan Terraform :)
sobi3ch
7

Berdasarkan jawaban imTachus tetapi kurang bertele-tele, plus lebih cepat. Anda harus menginstal jq dan 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

Skrip menjalankan aws ec2 describe-instancesparalel untuk setiap wilayah (sekarang 15!) Dan hanya mengekstrak bit yang relevan (status, tag, zona ketersediaan) dari keluaran json. Ini set +mdiperlukan agar proses latar belakang tidak melaporkan saat memulai / mengakhiri.

Contoh keluaran:

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

Setelah membaca semua solusi dan mencoba banyak hal, salah satu yang berhasil untuk saya adalah-

  1. Daftar barang
  2. Pergi ke Resource Group
  3. Editor Tag
  4. Pilih Semua Wilayah
  5. Pilih Instans EC2 dalam jenis sumber daya
  6. Klik Telusuri Sumber Daya

Cuplikan dari solusi

Rahul Talreja
sumber
3

Anda dapat menjalankan DescribeInstances()di semua wilayah.

Selain itu, Anda dapat:

  • Otomatiskan melalui jam tangan Lambda dan Cloud.
  • Buat titik akhir api menggunakan Lambda dan api gateway dan gunakan di kode Anda

Contoh di NodeJS:

  • Buat dan susun wilayah (titik akhir). [juga dapat menggunakan AWS descriptionRegions () ]
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 (wilayah);
    });

  • Kemudian, secara getInstancesfungsi, DescribeInstances()bisa dipanggil.
function getInstances (region) {
            EC2.describeInstances (params, function (err, data) {
                if (err) return console.log ("Kesalahan saat menyambung ke AWS, Instans Seperti Itu Tidak Ditemukan!");
                data.Reservations.forEach (function (reservasi) {
                // lakukan operasi yang diinginkan
      });
    }

Dan Off Course, silakan gunakan ES6 dan yang lebih baru.

Saya menulis fungsi lambda untuk memberi Anda semua instance dalam keadaan apa pun [berjalan, berhenti] dan dari wilayah mana pun, juga akan memberikan detail tentang jenis instance dan berbagai parameter lainnya.

Skrip berjalan di semua wilayah dan panggilan AWS DescribeInstances(), untuk mendapatkan instans.

Anda hanya perlu membuat fungsi lambda dengan run-time nodejs. Anda bahkan dapat membuat API darinya dan menggunakannya sesuai kebutuhan.

Selain itu, Anda dapat melihat Docs For DescribeInstances resmi AWS untuk menjelajahi lebih banyak opsi.

J. Parashar
sumber
1

Saya membuat skrip sumber terbuka yang membantu Anda mencantumkan semua instans AWS. https://github.com/Appnroll/aws-ec2-instances

Itu adalah bagian dari skrip yang mencantumkan instance untuk satu profil yang merekamnya ke dalam database postgreSQL dengan menggunakan jqfor json parsing:

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
tuhaj
sumber
1

Skrip saya di bawah ini, berdasarkan berbagai tips dari postingan ini dan di tempat lain. Skrip ini lebih mudah diikuti (setidaknya bagi saya) daripada baris perintah yang panjang.

Skrip mengasumsikan profil kredensial disimpan dalam file yang ~/.aws/credentialsterlihat seperti:

[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar

[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar

Naskah:

#!/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
Eduard Rozenberg
sumber
1
Jika Anda belum melakukannya, saya sarankan Anda membatalkan kredensial ini.
Thiago
@Thiago terima kasih tetapi kredensial itu bagaimanapun juga placeholder palsu :).
Eduard Rozenberg
1

Untuk menjalankan pekerjaan secara paralel dan menggunakan beberapa profil, gunakan skrip ini.

#! / bin / bash
untuk saya di profil1 profil2
melakukan
    OWNER_ID = `aws iam get-user --profile $ i --output text | awk -F ':' '{print $ 5}' `
    tput setaf 2; echo "Profil: $ i"; tput sgr0
    tput setaf 2; echo "OwnerID: $ OWNER_ID"; tput sgr0
    untuk wilayah di `aws --profile $ i ec2 deskripsikan-region --output teks | potong -f4`
    melakukan
        tput setaf 1; echo "Mencantumkan Instance di region $ region"; tput sgr0
        aws ec2 mendeskripsikan-instance --query 'Reservasi [*]. Instance [*]. [Tag [? Key == `Name`] .Value, InstanceId]' --profile $ i --region $ region --output text
    selesai &
selesai
Tunggu

Tangkapan layar:

tangkapan layar

Akhil Jalagam
sumber
0

Berdasarkan kode @hansaplast saya membuat versi ramah Windows yang mendukung banyak profil sebagai argumen. Simpan saja file itu sebagai file cmd atau bat. Anda juga harus memiliki jqperintah.

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

Anda dapat menggunakan alat cli yang dirancang untuk menghitung sumber daya cloud (pemindaian lintas wilayah dan akun) - https://github.com/scopely-devops/skew

Setelah konfigurasi singkat, Anda dapat menggunakan kode berikut untuk mencantumkan semua instans di semua wilayah AWS AS (dengan asumsi 123456789012 adalah nomor akun AWS Anda).

from skew import scan

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

Alat yang bagus untuk CRUD sumber daya AWS . Temukan [EC2 | RDS | IAM ..] di semua wilayah. Ada dapat melakukan operasi (stop | run | terminate) pada hasil filter.

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]
Rafal
sumber