Existe-t-il un moyen de rechercher la région d'une instance à partir de celle-ci?
Je cherche quelque chose de similaire à la méthode de trouver l'identifiant de l'instance .
Cette URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) ne semble plus fonctionner. Je reçois un 404 quand j'ai essayé de l'utiliser. J'ai le code suivant qui semble fonctionner cependant:
EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
J'espère que cela t'aides.
EDIT: Amélioré sed
sur la base de commentaires
Il y a un autre moyen d'y parvenir:
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo $REGION
us-east-1
Si vous êtes d'accord avec jq
, vous pouvez exécuter:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -r
Je suppose que c'est le moyen le plus propre.
ec2-metadata --availability-zone | sed 's/.$//'
Vous pouvez utiliser ec2-metadata:
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
Si vous souhaitez éviter les expressions rationnelles, voici une solution que vous pouvez utiliser avec Python:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"
Plus facile que j'ai trouvé jusqu'à présent
curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'
très simple one liner
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
Si vous avez jq installé, vous pouvez également vous en occuper (probablement la méthode la plus "gracieuse") de cette façon:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region
Cela retourne simplement la valeur brute de "région" sans aucune impression ni autre mise en forme. Référence: AWS Forum
Sortez la région de la zone de disponibilité, enlevez sa dernière lettre.
ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//'
Utilisez JQ:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
Grâce à https://unix.stackexchange.com/a/144330/13564 , avec bash 4.2+, nous pouvons simplement supprimer le dernier caractère de la zone de disponibilité:
$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1
Cela suppose qu'AWS continue d'utiliser un seul caractère pour les zones de disponibilité ajoutées à la région.
C'est la solution la plus propre que j'ai trouvée:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
Par exemple.,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
Solution très simple, j'ai finalement trouvé après avoir lu ces réponses:
$ hostname -f | cut -d'.' -f2
Exemple:
[centos @ ip-172-31-10-75 ~] $ nom_hôte -f
ip-172-31-10-75.us-west-1.compute.internal
[centos @ ip-172-31-10-75 ~] $
[centos @ ip-172-31-10-75 ~] $ nom_hôte -f | coupé-d '.' -f2
us-west-1
Si vous pouvez utiliser le kit SDK AWS Java, il existe maintenant une méthode qui renverra le nom de la région actuelle (tel que "us-east-1", "eu-west-1"). "):
Ou ne faites pas d'Ubuntu ou de cet outil une exigence, mais simplement:
: "${EBS_VOLUME_AVAILABILITY_ZONE:=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)}"
: ${EBS_VOLUME_REGION:="${EBS_VOLUME_AVAILABILITY_ZONE%%*([![:digit:]])}"}
Si vous travaillez avec JSON, utilisez les bons outils. jq beaucoup puissant dans ce cas.
# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1
2 doublure qui fonctionne tant que vous utilisez ec2.internal comme domaine de recherche:
az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone)
region=${az:0:${#az} - 1}
Pour ceux qui veulent faire ça avec le bon vieux PowerShell
$var = (curl http://169.254.169.254/latest/dynamic/instance-identity/document | Select-String-Pattern "Zone" | ConvertFrom-Json | Select-Object -ExpandProperty "region")
echo $var
Cela fonctionne pour eu-central-1 ainsi que pour les différentes zones de lettres. (Je n'ai pas assez de rep pour répondre à la réponse sed ci-dessus)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
Je cherchais également une solution pour trouver une région à partir de l'instance et voici ma solution pure de Bash:
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az:0:${#az}-1}
à moins qu'il y ait des régions où AZ a plus de deux lettres, ce que je ne connais pas.
Pour rechercher des informations sur l'EC2 auquel vous êtes connecté, vous pouvez utiliser l'outil ec2-metadata.
Vous pouvez installer l’outil en suivant ce lien. Après l’installation de l’outil, vous pouvez exécuter
# ec2-metadata -z
pour découvrir la région.
Cet outil est installé avec les dernières AMI Ubuntu (10.10),
Si vous utilisez Windows, vous pouvez utiliser ce one-liner powershell:
$region=(Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").region
Si vous souhaitez que la région utilise JS, cela devrait fonctionner:
meta.request("/latest/meta-data/placement/availability-zone",function(err,data){
if(err)
console.log(err);
else{
console.log(data);
str = data.substring(0, data.length - 1);
AWS.config.update({region:str});
ec2 = new AWS.EC2();
}
});
C'est le mappage trouvé à partir d'AWS DOCS. En réponse à l'appel de l'API de métadonnées, il suffit de couper le dernier caractère pour que cela fonctionne.
eu-west-1a :eu-west-1
eu-west-1b :eu-west-1
eu-west-1c :eu-west-1
us-east-1a :us-east-1
us-east-1b :us-east-1
us-east-1c :us-east-1
us-east-1d :us-east-1
ap-northeast-1a :ap-northeast-1
ap-northeast-1b :ap-northeast-1
us-west-1a :us-west-1
us-west-1b :us-west-1
us-west-1c :us-west-1
ap-southeast-1a :ap-southeast-1
ap-southeast-1b :ap-southeast-1