Tüm bölgelerde çalışan tüm Amazon EC2 bulut sunucularını nasıl görebilirim?


113

Örnekleri farklı bölgeler arasında sık sık değiştiriyorum ve bazen çalışan örneğimi farklı bir bölgeden kapatmayı unutuyorum. Amazon konsolunda çalışan tüm örnekleri görmenin bir yolunu bulamadım.
Bölgeden bağımsız olarak tüm çalışan örnekleri görüntülemenin bir yolu var mı?


47
AWS GUI'nin tüm örnekleri listelemenize izin vermemesi gerçekten çok aptalca.
Dan Dascalescu

4
İdeal değil ve kesinlikle açık değil, ancak Resource Groups > Tag Editorbir GUI seçeneği olarak kullanabilirsiniz . Aşağıdaki cevabıma bakın.
Heinrich Filter

3
@DanDascalescu emin misin? Çalışan bir bulut sunucusunu kapatmayı unutan OP gibi insanlardan AWS'nin ne kadar para kazandığını düşünüyorsunuz?
smartcaveman

2
@DanDascalescu, smartcaveman'ın söylediği gibi, örnekler birçok bölgeye yayılırsa ve Bezos için $ ticker tik tikleri atılırken unutulursa artık aptallık olur.
Eduard Rozenberg

2
@DanDascalescu, neyin çalıştığını gösterseler, olayları unutmaları için insanları nasıl suçlarlar ..?
EralpB

Yanıtlar:


125

Açık olmayan bir GUI seçeneği Resource Groups > Tag Editor. Burada, örnekler etiketlenmemiş olsa bile tüm bölgelerdeki tüm örnekleri bulabilirsiniz. Ekran görüntüsü


DÜZENLEME: Bu ekran yakın zamanda yeniden tasarlandı ve şimdi yeni bir görünüme ve "Tüm bölgeler" seçeneğine sahip.


2
Teşekkürler, harika hack!
Rob MacDonald

1
Bu yine değişti. Artık bu araçta "Bölgeler" bloğunu görmüyorum. Bunun yerine, "Mevcut Bölge" deki her şeyi gösterir. Bunun nerede kurulacağını yalnızca Tanrı bilir ... Yirmi ve 500 makinelik bir personelim olduğunu varsayarak bu aptallardan oldukça sıkıldım.
kesme noktası

1
@breakpoint, çoklu bölge aramasını destekleyen önceki Etiket Düzenleyiciye bir bağlantı eklemiş gibi görünüyor.
Heinrich Filter

1
Adamım bu bir hayat kurtarıcı! Paylaşım için teşekkürler! :-D
Lawrence

1
AWS 'tüm bölgeler' veya benzeri için yerleşik bir düşüşe sahip olsaydı harika olurdu
stevec

62

Bunu şu anda AWS GUI'de yapabileceğinizi sanmıyorum. Ancak, AWS CLI ile tüm bölgelerdeki tüm örneklerinizi listelemenin bir yolu:

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

Alındığı burada (siz tartışmanın tamamını görmek istiyorsanız)

Ayrıca, eğer bir

Bir bölge belirtmelisiniz. Bölgenizi "aws configure" komutunu çalıştırarak da yapılandırabilirsiniz.

Bunu ile yapabilirsiniz aws configure set region us-east-1, yorum için @ Sabuncu'ya teşekkürler.

Güncelleme

Şimdi (2019'da) 4. alana kesme komutu uygulanmalıdır: cut -f4


13
Önlemek için cutşunları kullanabilirsiniz:aws ec2 describe-regions --query Regions[*].[RegionName] --output text
stefansundin

Profiller kullanılıyorsa her iki aws ec2 komutuna --profile profil-adı ekleyin .
Carlton

Bu komutu Windows 10 CMD'de kullanabilirsiniz FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
Manjula

Bu şu anda işe yaramıyor You must specify a region. You can also configure your region by running "aws configure".gibi görünüyor - - bir bölge belirtmek yapmak istediğimin tam tersi gibi görünüyor
Will Sheppard

@WillSheppard Önce bölgenizi yapılandırmalısınız; ör aws configure set region us-east-1. O zaman koştuğun zaman aws ec2 describe-regionshiçbir problem yaşamazsın. Lütfen yanıta bakın: stackoverflow.com/a/46577479/360840 ve ilgili soru altındaki diğer yanıtlar.
Sabuncu

19

@imTachu çözümü iyi çalışıyor. Bunu AWS konsolu aracılığıyla yapmak için ...

  • AWS konsolu
  • Hizmetler
  • Ağ ve İçerik Teslimi
  • VPC
  • "Çalışan Örnekler" adlı bir blok arayın, bu size mevcut bölgeyi gösterecektir
  • Altındaki "Tüm bölgeleri gör" bağlantısını tıklayın

Artık "Hizmetler" altında "Ağ ve İçerik Dağıtımı" yok
Will Sheppard

2
AWS konsolunda: VPC- metin kutusu tipi 'VPC' ve ardından seçmek için tıklayın 'hizmet'> bulut kaynaklarını izole
nir Weiner

Tekrar güncellediler. Artık EC2 kontrol panelinde bir kısayol var. Örnekler bölümüne gidin ve "örnekler" i tıklayın. Size seçilen bölgedeki tüm çalışan örnekleri gösterecektir.
Mindfulgeek

17
  1. Önce AWS Management konsoluna gidin ve Resource grubuna tıklayın:

    görüntü açıklamasını buraya girin

  2. Ardından şunları bulun Network and Content Deliveryve tıklayın VPC:

    görüntü açıklamasını buraya girin

  3. Ardından Çalışan örnekleri bulun ve tüm bölgeleri gör öğesini genişletin. Burada tüm bölgenin tüm çalışan örneklerini bulabilirsiniz:

    görüntü açıklamasını buraya girin


13

Konsolda

VPC kontrol paneline https://console.aws.amazon.com/vpc/homegidin ve Running instances-> seçeneğine tıklayın See all regions.

görüntü açıklamasını buraya girin

CLI'da

Örneğin bunu ekleyin .bashrc. Yeniden yükleyin source ~/.bashrcve çalıştırın

Not: hariç aws CLI olması gerekir jq yüklü

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
}

Örnek çıktı:

$ 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

Bir kaynağı her oluşturduğunuzda, onu bir adla etiketleyin ve artık tüm bölgelerde bir ad etiketi ile her tür kaynağı bulmak için Kaynak Gruplarını kullanabilirsiniz .


Manuel olarak etiketlemekten yorulduysanız Terraform kullanın :)
sobi3ch

7

İmTachus cevabına dayalı, ancak daha az ayrıntılı ve daha hızlı. Sen olmalı jq ve aws-cli yüklü.

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

Komut dosyası, aws ec2 describe-instancesher bölge için paralel olarak çalışır (şimdi 15!) Ve json çıktısından yalnızca ilgili bitleri (durum, etiketler, kullanılabilirlik bölgesi) çıkarır. set +mArka plan işlemleri başlatırken / bitiş rapor kalmamak gereklidir.

Örnek çıktı:

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

4

Tüm çözümleri okuduktan ve bir çok şeyi denedikten sonra, benim için işe yarayan şey ...

  1. Liste öğesi
  2. Kaynak Grubuna Git
  3. Etiket Düzenleyici
  4. Tüm Bölgeleri Seçin
  5. Kaynak türünde EC2 Örneğini seçin
  6. Kaynakları Ara'yı tıklayın

Çözümün anlık görüntüsü


3

DescribeInstances()Tüm bölgelerde koşabilirsiniz .

Ek olarak şunları yapabilirsiniz:

  • Lambda ve Bulut izleme ile bunu otomatikleştirin.
  • Lambda ve api ağ geçidini kullanarak api uç noktası oluşturun ve kodunuzda kullanın

NodeJS'de bir örnek:

  • Bölgeler (uç noktalar) oluşturma ve dizisi. [AWS defineRegions () da kullanabilir ]
var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1 ',' ap-güneydoğu-1 ',' ap-güneydoğu-2 ',' ap-kuzeydoğu-1 ',' ap-kuzeydoğu-2 '];

    regionNames.forEach (işlev (bölge) {
        getInstances (bölge);
    });

  • Daha sonra getInstancesişlev DescribeInstances()olarak çağrılabilir.
function getIndition (bölge) {
            EC2.describeInstances (parametreler, işlev (hata, veri) {
                if (err) console.log'u döndürür ("AWS'ye bağlanma hatası, Böyle Bir Örnek Bulunamadı!");
                data.Reservation.forEach (function (ayırma) {
                // amaçlanan herhangi bir işlemi yapın
      });
    }

Ve Elbette, ES6 ve üstünü kullanmaktan çekinmeyin.

Herhangi bir durumdaki [çalışan, durdurulmuş] ve herhangi bir bölgeden tüm örnekleri size ulaştırmak için bir lambda işlevi yazdım, ayrıca örnek türü ve çeşitli diğer parametreler hakkında ayrıntılar da vereceğim.

Komut DosyasıDescribeInstances() , örnekleri almak için tüm AWS bölgelerinde çalışır ve çağrı yapar .

Sadece çalışma zamanı ile bir lambda işlevi oluşturmanız gerekir nodejs. Hatta ondan API oluşturabilir ve gerektiğinde ve gerektiği zaman kullanabilirsiniz.

Ek olarak, daha birçok seçeneği keşfetmek için AWS resmi Docs For DescribeInstances bölümüne bakabilirsiniz .


1

Tüm AWS örneklerini listelemenize yardımcı olacak açık kaynaklı bir komut dosyası oluşturdum. https://github.com/Appnroll/aws-ec2-instances

Bu jq, json ayrıştırma kullanarak onları bir postgreSQL veritabanına kaydeden bir profilin örneklerini listeleyen komut dosyasının bir parçasıdır :

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

Bu yazıdan ve başka yerlerden çeşitli ipuçlarına dayanan aşağıdaki senaryom. Betiği takip etmek (en azından benim için) uzun komut satırlarından daha kolaydır.

Komut dosyası, kimlik bilgileri profillerinin aşağıdaki ~/.aws/credentialsgibi bir dosyada saklandığını varsayar :

[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar

[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar

Senaryo:

#!/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
Henüz yapmadıysanız, bu kimlik bilgilerini geçersiz kılmanızı öneririm.
Thiago

@Thiago teşekkürler, ancak bu kimlik bilgileri zaten sahte yer tutuculardı :).
Eduard Rozenberg

1

İşleri paralel olarak çalıştırmak ve birden çok profil kullanmak için bu komut dosyasını kullanın.

#! / bin / bash
profile1 profil2'de i için
yapmak
    OWNER_ID = `aws iam get-user --profile $ i - çıktı metni | awk -F ':' '{baskı $ 5}' '
    tput setaf 2; echo "Profil: $ i"; tput sgr0
    tput setaf 2; echo "OwnerID: $ OWNER_ID"; tput sgr0
    bölge için "aws --profile $ i ec2 define-bölgeleri - çıktı metni | kesim -f4`
    yapmak
        tput setaf 1; echo "$ bölge bölgesindeki Örnekleri Listeleme"; tput sgr0
        aws ec2 açık-örnekleri --query 'Rezervasyonları [*]. Örnekler [*]. [Etiketler [? Anahtar == `Ad`] .Değer, ÖrnekKimliği]' --profile $ i - bölge $ bölge - çıktı metni
    bitti &
bitti
Bekle

Ekran görüntüsü:

ekran görüntüsü


0

@Hansaplast koduna dayanarak, argüman olarak birden çok profili destekleyen Windows dostu bir sürüm oluşturdum. Sadece bu dosyayı cmd veya bat dosyası olarak kaydedin. Ayrıca jqkomuta da ihtiyacınız var .

@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

Bulut kaynaklarını sıralamak için tasarlanmış cli aracını kullanabilirsiniz (bölgeler arası ve hesaplar arası tarama) - https://github.com/scopely-devops/skew

Kısa yapılandırmadan sonra, tüm ABD AWS bölgelerindeki tüm örnekleri listelemek için aşağıdaki kodu kullanabilirsiniz (123456789012'nin AWS hesap numaranız olduğu varsayılır).

from skew import scan

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

0

AWS kaynaklarını CRUD için iyi bir araç . Tüm bölgelerde [EC2 | RDS | IAM ..] öğesini bulun. Süzgeç sonuçlarında işlemler (durdur | çalıştır | sonlandır) yapılabilir.

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]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.