Je change souvent d'instance entre différentes régions et parfois j'oublie de désactiver mon instance en cours d'exécution dans une autre région. Je n'ai trouvé aucun moyen de voir toutes les instances en cours d'exécution sur la console Amazon.
Existe-t-il un moyen d’afficher toutes les instances en cours indépendamment de la région?
Je ne pense pas que vous puissiez actuellement le faire dans l'interface graphique AWS. Mais voici un moyen de répertorier toutes vos instances dans toutes les régions avec l'AWS CLI:
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
Tiré de ici (si vous voulez voir la discussion complète)
EDIT: Comme @breakpoint le souligne dans les commentaires, il semble que l'éditeur de balises ait été mis à jour et que la fonctionnalité de recherche entre régions ait été supprimée: - /
Je mettrai cela à jour si je trouve une alternative.
Une option d'interface graphique non évidente est Resource Groups > Tag Editor
. Ici vous pouvez trouver toutes les instances dans toutes les régions, même si l’instance n’a pas été taguée .
Chaque fois que vous créez une ressource, associez-lui un nom et identifiez-la. Vous pouvez maintenant utiliser Groupes de ressources pour rechercher tous les types de ressources portant une balise de nom dans toutes les régions.
Basé sur imTachus, mais répondez moins, et plus rapidement. Vous devez avoir jq et aws-cli installé.
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
Le script exécute le aws ec2 describe-instances
en parallèle pour chaque région (maintenant 15!) Et extrait uniquement les bits pertinents (état, balises, zone de disponibilité) de la sortie json. Le set +m
est nécessaire pour que les processus en arrière-plan ne fassent pas état du début/de la fin.
Exemple de sortie:
{
"type": "t2.micro",
"state": "stopped",
"tags": [
{
"Key": "Name",
"Value": "MyEc2WebServer"
},
],
"zone": "eu-central-1b"
}
La solution @imTachu fonctionne bien. Pour ce faire via la console AWS ...
Vous pouvez exécuter DescribeInstances()
dans toutes les régions.
De plus, vous pouvez:
Un exemple dans NodeJS:
var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1 ',' ap-sud-est-1 ',' ap-sud-est-2 ',' ap-nord-est-1 ',' ap-nord-est-2 ']; regionNames.forEach (fonction (region) { getInstances (region); });
getInstances
, DescribeInstances()
peut être appelé Appelé.fonction getInstances (région) { EC2.describeInstances (params, fonction (err, données) { If (err) renvoie console.log ("Erreur de connexion à AWS, aucune instance trouvée!"); Data.Reservations.forEach (fonction ( réservation) { // effectuer toute opération voulue }); }
Et bien sûr, n'hésitez pas à utiliser ES6 et supérieur.
J'ai écrit une fonction lambda pour obtenir toutes les instances dans n'importe quel état [en cours d'exécution, arrêté] et dans toutes les régions. Vous y trouverez également des détails sur le type d'instance et divers autres paramètres.
Le script s'exécute dans toutes les régions AWS et appelle DescribeInstances()
pour obtenir les instances.
Il vous suffit de créer une fonction lambda avec nodejs
..__ au moment de l'exécution. Vous pouvez même créer une API à partir de celle-ci et l'utiliser au besoin.
De plus, vous pouvez consulter le document officiel AWS pour DescribeInstances pour explorer de nombreuses autres options.
Tout d'abord, allez dans AWS Management Console et cliquez sur Groupe de ressources:
Ensuite, trouvez Network and Content Delivery
et cliquez sur la VPC
:
Recherchez ensuite les instances en cours d’exécution et développez voir toutes les régions. Ici vous pouvez trouver toutes les instances en cours de toutes les régions:
Vous pouvez utiliser l'outil cli conçu pour énumérer les ressources du cloud (analyse inter-régions et inter-comptes) - https://github.com/scopely-devops/skew
Après une courte configuration, vous pouvez utiliser le code suivant pour répertorier toutes les instances de toutes les régions AWS américaines (en supposant que 123456789012 est votre numéro de compte AWS).
from skew import scan
arn = scan('arn:aws:ec2:us-*:123456789012:instance/*')
for resource in arn:
print(resource.data)
Sur la base du code @hansaplast, j'ai créé une version conviviale de Windows prenant en charge plusieurs profils en tant qu'argument. Il suffit de sauvegarder ce fichier en tant que fichier cmd ou bat. Vous devez également avoir la commande 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}"
)
Mon script ci-dessous, basé sur divers conseils de ce post et d'ailleurs. Le script est plus facile à suivre (du moins pour moi) que les longues lignes de commande.
Le script suppose que le ou les profils d'identification sont stockés dans le fichier ~/.aws/credentials
et ressemblent à quelque chose comme:
[default]
aws_access_key_id = ODJFDOIOIJIJFJDIOFHJ
aws_secret_access_key = spdofksdpfok345opdfkgfdpogkdsfjsd
[work]
aws_access_key_id = GF6TPDWBZMZWCZ8P1002
aws_secret_access_key = fpoksdfopdskf4350sdfsjdfkosdfjlfs
Scénario:
#!/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
Bon outil pour ressources CRUD AWS . Trouvez [EC2 | RDS | IAM ..] dans toutes les régions. Il peut faire des opérations (stop | run | terminate) sur les résultats des filtres.
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]
J'ai créé un script open-source qui vous aide à répertorier toutes les instances AWS. https://github.com/Appnroll/aws-ec2-instances
C'est une partie du script qui répertorie les instances d'un profil qui les enregistre dans une base de données postgreSQL en utilisant jq
pour l'analyse 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
done