Cambio las instancias entre diferentes regiones con frecuencia y, a veces, me olvido de apagar mi instancia en ejecución desde una región diferente. No pude encontrar ninguna forma de ver todas las instancias en ejecución en la consola de Amazon.
¿Hay alguna forma de mostrar todas las instancias en ejecución independientemente de la región?
Basado en el código de @hansaplast, creé una versión compatible con Windows que admite múltiples perfiles como argumento. Simplemente guarde ese archivo como archivo cmd o bat. También necesita tener el comando 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}" )La solución @imTachu funciona bien. Para hacer esto a través de la consola de AWS...
Edición de noviembre de 2021 : AWS lanzó recientemente Amazon EC2 Global View con soporte inicial para instancias, VPC, subredes, grupos de seguridad y volúmenes.
Consulte el anuncio o la documentación para obtener más detalles.
Una opción de GUI no obvia es elEditor de etiquetas en la consola de Grupos de recursos. Aquí puede encontrar todas las instancias en todas las regiones, incluso si las instancias no estaban etiquetadas. 
Puede usar la herramienta cli diseñada para enumerar los recursos de la nube (escaneo entre regiones y entre cuentas): https://github.com/scopely-devops/skew
Después de una breve configuración, puede usar el siguiente código para enumerar todas las instancias en todas las regiones de AWS de EE. UU. (suponiendo que 123456789012 sea su número de cuenta de AWS).
from skew import scan arn = scan('arn:aws:ec2:us-*:123456789012:instance/*') for resource in arn: print(resource.data)Buena herramienta para los recursos CRUD de AWS . Busque [EC2|RDS|IAM..] en todas las regiones. Puede hacer operaciones (detener|ejecutar|terminar) en los resultados de los filtros.
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]Primero vaya a la Consola de administración de AWS y haga clic en Grupo de recursos:
Luego busque Network and Content Delivery y haga clic en VPC :
Luego busque Instancias en ejecución y expanda ver todas las regiones. Aquí puede encontrar todas las instancias en ejecución de todas las regiones:
Mi guión a continuación, basado en varios consejos de esta publicación y en otros lugares. El guión es más fácil de seguir (al menos para mí) que las largas líneas de comando.
El script asume que los perfiles de credenciales se almacenan en el archivo ~/.aws/credentials con un aspecto similar a:
[default] aws_access_key_id = foobar aws_secret_access_key = foobar [work] aws_access_key_id = foobar aws_secret_access_key = foobarTexto:
#!/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 doneCreé un script de código abierto que lo ayuda a enumerar todas las instancias de AWS. https://github.com/Appnroll/aws-ec2-instances
Esa es una parte del script que enumera las instancias de un perfil y las registra en una base de datos postgreSQL usando jq para el análisis de json:
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 doneCada vez que cree un recurso, etiquételo con un nombre y ahora puede usar los grupos de recursos para buscar todo tipo de recursos con una etiqueta de nombre en todas las regiones.
Puede ejecutar DescribeInstances() en todas las regiones.
Además, puedes:
Una muestra en NodeJS:
var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1 ', 'ap-sureste-1', 'ap-sureste-2', 'ap-noreste-1', 'ap-noreste-2'];
regionNames.forEach(función(región) {
getInstances(región);
});
getInstances , se puede llamar a DescribeInstances() . función getInstances(región) {
EC2.describeInstances(parámetros, función(err, datos) {
if (err) return console.log("Error al conectarse a AWS, no se encontró tal instancia!");
data.Reservations.forEach(función(reserva) {
//hacer cualquier operación prevista
});
}
Y por supuesto, siéntete libre de usar ES6 y superior.
Escribí una función lambda para obtener todas las instancias en cualquier estado [ejecutando, detenido] y de cualquier región, también brindaré detalles sobre el tipo de instancia y varios otros parámetros.
El script se ejecuta en todas las regiones de AWS y llama a DescribeInstances() para obtener las instancias.
Solo necesita crear una función lambda con nodejs en tiempo de ejecución. Incluso puede crear una API a partir de ella y usarla cuando sea necesario.
Además, puede ver los documentos oficiales de AWS para DescribeInstances para explorar muchas más opciones.
No creo que actualmente pueda hacer esto en la GUI de AWS. Pero aquí hay una forma de enumerar todas sus instancias en todas las regiones con la CLI de AWS:
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 doneTomado de aquí (si quieres ver la discusión completa)
Además, si está obteniendo un
Debe especificar una región. También puede configurar su región ejecutando "aws configure"
Puede hacerlo con aws configure set region us-east-1 , gracias a @Sabuncu por el comentario.
Actualizar
Ahora (en 2019) el comando de corte debe aplicarse en el cuarto campo: cut -f4
Basado en la respuesta de imTachus, pero menos detallado y más rápido. Necesita tener jq y aws-cli instalados.
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 El script ejecuta las aws ec2 describe-instances en paralelo para cada región (¡ahora 15!) y extrae solo los bits relevantes (estado, etiquetas, zona de disponibilidad) de la salida json. El set +m es necesario para que los procesos en segundo plano no informen cuando comienzan o finalizan.
Salida de ejemplo:
{ "type": "t2.micro", "state": "stopped", "tags": [ { "Key": "Name", "Value": "MyEc2WebServer" }, ], "zone": "eu-central-1b" }Un comando rápido bash oneliner para imprimir todos los ID de instancia en todas las regiones:
$ aws ec2 describe-regions --query "Regions[].{Name:RegionName}" --output text |xargs -I {} aws ec2 describe-instances --query Reservations[*].Instances[*].[InstanceId] --output text --region {} # Example output i-012344b918d75abcd i-0156780dad25fefgh i-0490122cfee84ijkl ...Para ejecutar trabajos en paralelo y usar múltiples perfiles, use este script.
#!/bin/bash
para i en perfil1 perfil2
hacer
OWNER_ID=`aws iam get-user --profile $i --texto de salida | awk -F ':' '{imprimir $5}'`
tput setaf 2;echo "Perfil: $i";tput sgr0
tput setaf 2; echo "ID de propietario: $ OWNER_ID"; tput sgr0
para región en `aws --profile $i ec2 describe-regiones --texto de salida | cortar -f4`
hacer
tput setaf 1;echo "Listado de instancias en la región $región";tput sgr0
aws ec2 describe-instances --query 'Reservaciones[*].Instancias[*].[Etiquetas[?Clave==`Nombre`].Valor, Id. de instancia]' --perfil $i --región $región --texto de salida
hecho &
hecho
Espere
Captura de pantalla:
en consola
Vaya al panel de VPC https://console.aws.amazon.com/vpc/home y haga clic en Running instances -> See all regions .
En CLI
Agregue esto, por ejemplo, a .bashrc . Vuelva a source ~/.bashrc y ejecútelo
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 }Salida de ejemplo:
$ 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'..Después de leer todas las soluciones y probar un montón de cosas, la que funcionó para mí fue:
Usando bash-my-aws :
region-each instancesNo estoy seguro de cuánto tiempo ha estado aquí esta opción, pero puede ver una vista global de todo buscando EC2 Global View