it-swarm.com.de

Wie können Sie alle Amazon EC2-Instanzen in allen Regionen anzeigen?

Ich wechsle häufig zwischen verschiedenen Regionen und manchmal vergesse ich, meine laufende Instanz aus einer anderen Region auszuschalten. Ich konnte keine Möglichkeit finden, alle laufenden Instanzen auf der Amazon-Konsole anzuzeigen.
Gibt es eine Möglichkeit, alle laufenden Instanzen unabhängig von der Region anzuzeigen?

45
JerryGoyal

Ich glaube nicht, dass Sie dies derzeit in der AWS-GUI tun können. Mit der AWS-CLI können Sie jedoch alle Ihre Instanzen in allen Regionen auflisten:

for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region
done

Genommen von hier (Wenn Sie die vollständige Diskussion sehen möchten)

42
imTachu

BEARBEITEN: Wie @breakpoint in den Kommentaren hervorhebt, sieht es so aus, als ob der Tag-Editor aktualisiert wurde und die Funktion zur Suche nach Regionen entfernt wurde: - /

Ich werde dies aktualisieren, wenn ich eine Alternative finde.


Eine nicht offensichtliche GUI-Option ist Resource Groups > Tag Editor. Hier können Sie alle Instanzen in allen Regionen finden, auch wenn die Instanz nicht mit Tags versehen wurde . enter image description here

38
Heinrich Filter

Jedes Mal, wenn Sie eine Ressource erstellen, kennzeichnen Sie sie mit einem Namen. Jetzt können Sie Resource Groups verwenden, um alle Ressourcentypen mit einem Namens-Tag in allen Regionen zu finden.

7

Basierend auf der imTachus Antwort, aber weniger ausführlich, und schneller. Sie müssen jq und aws-cli installiert haben.

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

Das Skript führt den aws ec2 describe-instances für jede Region (jetzt 15!) Parallel aus und extrahiert nur die relevanten Bits (Status, Tags, Verfügbarkeitszone) aus der Json-Ausgabe. Der set +m wird benötigt, damit die Hintergrundprozesse beim Starten/Beenden nicht berichten.

Beispielausgabe:

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

@imTachu-Lösung funktioniert gut. Dazu über die AWS-Konsole ...

  • AWS-Konsole
  • Dienstleistungen
  • Vernetzung und Bereitstellung von Inhalten
  • VPC
  • Suchen Sie nach einem Block mit dem Namen "Laufende Instanzen", der die aktuelle Region anzeigt
  • Klicken Sie darunter auf den Link "Alle Regionen anzeigen"
6
Carlton

Sie können DescribeInstances() in allen Regionen ausführen.

Zusätzlich können Sie:

  • Automatisieren Sie es durch Lambda und Cloud Watch.
  • Erstellen Sie einen API-Endpunkt mit Lambda und API-Gateway und verwenden Sie ihn in Ihrem Code

Ein Beispiel in NodeJS: 

var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1 ',' ap-südost-1 ',' ap-südost-2 ',' ap-nordost-1 ',' ap-nordost-2 ']; 
__. regionNames.forEach (Funktion (Region) {
 getInstances (Region); 
}); 

  • In getInstances function kann DescribeInstances() dann aufgerufen werden.
funktion getInstances (Region) {
 EC2.describeInstances (Parameter, Funktion (err, data) {
 If (err) gibt console.log zurück ("Fehler beim Verbinden mit AWS, Keine Suchinstanz gefunden!"); 
 Data.Reservations.forEach (function ( reservation) {
 // Jede beabsichtigte Operation ausführen 
}); 
} 

Natürlich können Sie auch ES6 und höher verwenden.

Ich habe eine Lambda-Funktion geschrieben, mit der Sie alle Instanzen in einem beliebigen Status [laufen, gestoppt] und aus beliebigen Regionen erhalten können. Außerdem werden Details zum Instanztyp und zu verschiedenen anderen Parametern angegeben.

Das Skript wird in allen AWS-Regionen ausgeführt und ruft DescribeInstances() auf, um die Instanzen abzurufen.

Sie müssen lediglich eine Lambda-Funktion mit der Laufzeit nodejs..__ erstellen. Sie können sogar API daraus erstellen und sie nach Bedarf verwenden.

Darüber hinaus können Sie die offiziellen Dokumente von AWS für DescribeInstances anzeigen, um viele weitere Optionen zu erkunden.

2
J. Parashar
  1. Gehen Sie zuerst zu AWS Management Console und klicken Sie auf Ressourcengruppe:

     enter image description here

  2. Dann Network and Content Delivery suchen und auf VPC klicken:

     enter image description here

  3. Suchen Sie dann nach Laufende Instanzen und erweitern Sie die Anzeige aller Regionen. Hier finden Sie alle laufenden Instanzen aller Regionen:

     enter image description here

0
rdhawladar

Sie können das CLI-Tool zum Auflisten von Cloud-Ressourcen (Regions- und Kontenübergreifender Scan) verwenden - https://github.com/scopely-devops/skew

Nach einer kurzen Konfiguration können Sie den folgenden Code verwenden, um alle Instanzen in allen US-amerikanischen AWS-Regionen aufzulisten (vorausgesetzt, 123456789012 ist Ihre AWS-Kontonummer).

from skew import scan

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

Basierend auf @ hansaplast-Code habe ich eine Windows-Version erstellt, die mehrere Profile als Argument unterstützt. Speichern Sie diese Datei einfach als cmd- oder bat-Datei. Sie müssen auch den Befehl jq haben.

@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
Pawel

Mein Skript unten, basierend auf verschiedenen Tipps aus diesem Beitrag und anderswo. Das Skript ist (zumindest für mich) einfacher zu befolgen als die langen Befehlszeilen.

Das Skript geht davon aus, dass Anmeldeinformationsprofile in der Datei ~/.aws/credentials gespeichert sind und ungefähr so ​​aussehen:

[default]
aws_access_key_id = ODJFDOIOIJIJFJDIOFHJ
aws_secret_access_key = spdofksdpfok345opdfkgfdpogkdsfjsd

[work]
aws_access_key_id = GF6TPDWBZMZWCZ8P1002
aws_secret_access_key = fpoksdfopdskf4350sdfsjdfkosdfjlfs

Skript:

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

Gutes Werkzeug für CRUD AWS-Ressourcen . Finden Sie [EC2 | RDS | IAM ..] in allen Regionen. Es können Operationen (stop | run | terminate) für Filterergebnisse ausgeführt werden. 

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

Ich habe ein Open-Source-Skript erstellt, mit dem Sie alle AWS-Instanzen auflisten können. https://github.com/Appnroll/aws-ec2-instances

Dies ist ein Teil des Skripts, das die Instanzen für ein Profil auflistet, das sie in einer PostgreSQL-Datenbank mit jq für das JSON-Parsing aufzeichnet:

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
0
tuhaj