Existe-t-il un moyen de rechercher la région d'une instance à partir de l'instance?
Je recherche quelque chose de similaire à la méthode de recherche de l'ID d'instance .
amazon-ec2
amazon-web-services
Gary Richardson
la source
la source
http://169.254.169.254/latest/meta-data/placement/availability-zone
et supprimer le dernier caractère.Réponses:
Cette URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) ne semble plus fonctionner. J'obtiens un 404 quand j'essaye de l'utiliser. J'ai le code suivant qui semble fonctionner cependant:
J'espère que cela t'aides.
EDIT: Amélioré en
sed
fonction des commentairesla source
ec2-metadata
est juste un wrapper pour cette API, mais fait essentiellement la même chose.sed 's/[a-z]$//
Il existe un autre moyen d'y parvenir:
la source
404 - Not Found
àGET
cette URL depuis une machine dansus-east-1a
.curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
Si vous êtes d'accord avec l'utilisation
jq
, vous pouvez exécuter ce qui suit:Je suppose que c'est le moyen le plus propre.
la source
Pour les systèmes basés sur Debian, la commande est sans tiret.
la source
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
ne semble pas être disponible par défaut - pouvez-vous inclure des instructions d'installation?Si vous voulez éviter les expressions régulières, voici une ligne unique que vous pouvez faire avec Python:
la source
Vous pouvez utiliser ec2-metadata:
la source
eu-central-1
vous êtes foutu.central
n'existait pas lorsque j'ai écrit ma réponse. C'est ajouté maintenant.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
ne conservera que les deux premiers composants du nom AZ.eu-west-1
,eu-west-2
eteu-west-3
(Aussius-west-1
etus-west-2
) @OP: juste la correspondance'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
semble plus sûre (c'est-à-dire une expression régulière de base, elle peut être raccourcie avec une RE étendue). (La regex actuelle se cassera sur laca
région, lesaf
régions et lame
région)Le plus simple que j'ai trouvé jusqu'à présent
la source
une doublure très simple
la source
curl: (6) Could not resolve host: instance-data; Name or service not known
erreur.Si jq est installé, vous pouvez également vous y prendre (probablement la méthode la plus "gracieuse") de cette façon:
Cela renvoie simplement la valeur brute de "region" sans aucune jolie impression ou autre formatage. Référence: AWS Forum
la source
Récupérez la région dans la zone de disponibilité, supprimez-en la dernière lettre.
la source
Utilisez JQ:
la source
Si vous pouvez utiliser le kit AWS Java SDK, il existe désormais une méthode qui renvoie le nom de la région actuelle (telle que "us-east-1", "eu-west-1"):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
la source
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')
la source
Grâce à https://unix.stackexchange.com/a/144330/135640 , avec bash 4.2+, nous pouvons simplement supprimer le dernier caractère de la zone de disponibilité:
Cela suppose qu'AWS continue d'utiliser un seul caractère pour les zones de disponibilité ajoutées à la région.
la source
region=${region%?}
2 doublure qui fonctionne tant que vous utilisez ec2.internal comme domaine de recherche:
la source
Pour tous ceux qui veulent faire ça avec le bon vieux PowerShell
la source
Ou ne faites pas d'Ubuntu ou de cet outil une exigence et faites simplement:
la source
Si vous travaillez avec json, utilisez les bons outils. jq bien puissant dans ce cas.
la source
Cela fonctionne pour eu-central-1 ainsi que pour les différentes zones de lettres. (Je n'ai pas assez de représentants pour répondre à la réponse sed ci-dessus)
la source
ec2metadata --availability-zone | sed 's/.$//'
(sans tiret)Si vous utilisez Windows, vous pouvez utiliser ce PowerShell One-Liner:
la source
Je cherchais également une solution pour trouver la région à partir de l'instance et voici ma solution pure Bash:
à moins qu'il y ait des régions où AZ a plus de deux lettres, dont je ne suis pas au courant.
la source
Pour obtenir 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 avoir installé 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),
la source
ec2-metadata -z
affiche uniquement la zone de disponibilité, pas la région.Si vous cherchez à obtenir une région à l'aide de JS, cela devrait fonctionner:
C'était le mappage trouvé à partir d'AWS DOCS, en réponse à l'appel d'API de métadonnées, il suffit de couper le dernier caractère pour fonctionner.
la source
ec2metadata
(pas de tiret) est la commande actuelle pour vous fournir toutes les informations d'hébergement aws sur votre box ec2. c'est l'approche la plus élégante et la plus sûre. (ec2-metadata
est l'ancienne commande qui n'est plus valide.)la source
Une méthode utilisant uniquement egrep, qui devrait fonctionner sur la plupart des instances Linux lancées sans avoir à installer d'outils supplémentaires. J'ai testé cela par rapport à une liste de toutes les régions AWS actuelles et elles correspondent toutes.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Explication du REGEX:
Si vous voulez cela dans une variable, faites:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
la source
Pour la solution sed et curl, il semble que le format ait un peu changé. Pour moi fonctionne
la source
À un moment donné depuis ce la plupart de ces réponses ont été affichées, AWS a fait la chose raisonnable et mis en œuvre un nouveau chemin:
latest/meta-data/placement/region
.Cela signifie que l'obtention de la région doit être aussi simple que
la source
Vous pouvez obtenir la région de l'instance à l'aide de cette requête curl
la source