2017-08-20 3 views
0

Ich möchte einige Tags der EC2-Spot-Instanz zu füllen, aber wie es unmöglich ist, es direkt in Spot-Anfrage zu tun, mache ich es über Benutzerdaten Skript. Alles geht gut, wenn ich die Region statisch festlege, aber es ist kein universeller Ansatz. Wenn ich versuche, die aktuelle Region aus den Benutzerdaten der Instanz zu ermitteln, ist die Variable immer leer. Ich mache es auf folgende Weise:EC2-Instance-Bereich ist nicht gefüllt in Benutzer-Datenskript

#!/bin/bash 
region=$(ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//') 
aws ec2 create-tags \ 
    --region $region \ 
    --resources `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` \ 
    --tags Key=sometag,Value=somevalue Key=sometag,Value=somevalue 

Ich versuchte, eine Verzögerung, bevor Region gemacht bevöl

/bin/sleep 30 

aber hatte kein Ergebnis.

Wenn ich dieses Skript jedoch nach dem Start manuell ausführen, werden die Tags hinzugefügt. Was ist los?

Warum alles in allem aws-cli nicht Standardbereich aus dem Profil bekommen? Ich habe aws configure ordnungsgemäß innerhalb der Instanz konfiguriert, aber ohne --region Klausel es Fehler, dass Region nicht angegeben wird.

+1

Es ist immer gut, Pfade in Shell-Skripts vollständig zu qualifizieren. Wenn Sie es manuell ausführen, ist die Umgebung wahrscheinlich ziemlich unterschiedlich, einschließlich '$ PATH' ... also wollen Sie' region = $ (/ usr/bin/ec2-metadata ... '(oder wo auch immer es sich auf Ihrem System befindet) –

Antwort

0

landete ich mit

region=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print" 

die fein gearbeitet. Es wäre jedoch in Ordnung, wenn jemand die Schraubenzieher erklären würde.

+0

Dies ist die URL, über die der Amazon EC2-Hypervisor [Instanzmetadaten] bereitstellt (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). Die Anforderung wird nicht ausgeführt über das Netzwerk - es wird direkt an die Instanz zurückgegeben. Der Befehl 'ec2-metadata' ruft diese URL einfach in Ihrem Namen auf, so dass das Arbeitsergebnis einfach direkt aufgerufen wird. Das Dokument gibt [Informationen über die Instanz] zurück (http: //docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html). –

2

Ich vermute, dass der Befehl ec2-metadata nicht verfügbar ist, wenn Ihr Userdata-Skript ausgeführt wird. Versuchen Sie, die Region aus dem Metadatenserver immer direkt (was ec2-metadata tut sowieso)

region=$(curl -fsq http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/[a-z]$//') 

AWS CLI Nutzt die Region von Standardprofil.

Verwandte Themen