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?
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)
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 .
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.
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"
}
@imTachu-Lösung funktioniert gut. Dazu über die AWS-Konsole ...
Sie können DescribeInstances()
in allen Regionen ausführen.
Zusätzlich können Sie:
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); });
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.
Gehen Sie zuerst zu AWS Management Console und klicken Sie auf Ressourcengruppe:
Dann Network and Content Delivery
suchen und auf VPC
klicken:
Suchen Sie dann nach Laufende Instanzen und erweitern Sie die Anzeige aller Regionen. Hier finden Sie alle laufenden Instanzen aller Regionen:
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)
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}"
)
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
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]
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