Amazon hat kürzlich die wunderbare Funktion hinzugefügt, EC2-Instanzen mit Schlüssel-Wert-Paaren zu versehen, um die Verwaltung einer großen Anzahl von VMs etwas zu vereinfachen.
Gibt es eine Möglichkeit, diese Tags auf die gleiche Weise wie einige der anderen vom Benutzer festgelegten Daten abzufragen? Beispielsweise:
$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d
Gibt es eine ähnliche Möglichkeit, die Tags abzufragen?
amazon-web-services
amazon-ec2
Josh Lindsey
quelle
quelle
ec2metadata --instance-id
--out = json | jq '.Tags [] | select (.Key == "role") | .Value 'ec2metadata
Tool ist veraltet. Jetzt fragen Sie die 'magische' URL unter 169.254.169.254/latest/meta-data ab - drücken Sie sie mit cURL und Sie erhalten magische Endpunkte, mit denen Sie verschiedene Datenbits abrufen können. In diesem Fall erhaltencurl http://169.254.169.254/latest/meta-data/instance-id
Sie Ihre Instanz-IDDas folgende Bash-Skript gibt den Namen Ihrer aktuellen ec2-Instanz zurück (den Wert des Tags "Name"). Ändern Sie TAG_NAME an Ihren speziellen Fall.
So installieren Sie die aws cli
Wenn Sie IAM anstelle expliziter Anmeldeinformationen verwenden, verwenden Sie die folgenden IAM-Berechtigungen:
quelle
aws ec2 describe-tags
. Ich musste diesen IAM zu den Inline-Richtlinien meiner IAM-Rolle hinzufügen. Vielen Dank!| cut -f5
mit--query="Tags[0].Value"
.Sobald Sie haben
ec2-metadata
undec2-describe-tags
installiert (wie in erwähnt Ranieri Antwort oben ), hier ist ein Befehl Beispiel Shell den „Namen“ der aktuellen Instanz zu erhalten, vorausgesetzt , Sie sind ein „Name = Foo“ Tag drauf haben.Angenommen, die Umgebungsvariablen EC2_PRIVATE_KEY und EC2_CERT sind festgelegt.
Dies kehrt zurück
Foo
.quelle
ec2-describe-tags
Standardwert istus-east-2
. Bitte übergeben Sie die--region
Flagge, um eine andere Region zu verwenden.Sie können dieses Skript zu Ihren Cloud-Init- Benutzerdaten hinzufügen , um EC2-Tags in eine lokale Datei herunterzuladen:
Sie benötigen die auf Ihrem System installierten AWS CLI-Tools: Sie können sie entweder mit einem
packages
Abschnitt in einer Cloud-Konfigurationsdatei vor dem Skript installieren , eine AMI verwenden, die sie bereits enthält, oder einapt
oder hinzufügenyum
-Befehl am Anfang des Skripts .Um auf EC2-Tags zugreifen zu können, benötigen Sie eine Richtlinie wie diese in der IAM-Rolle Ihrer Instanz:
Die EC2-Tags der Instanz sind
/etc/ec2-tags
in folgendem Format verfügbar :Sie können die Datei unverändert in ein Shell-Skript aufnehmen, indem Sie
. /etc/ec2-tags
beispielsweise Folgendes verwenden :Die Tags werden während der Instanzinitialisierung heruntergeladen, sodass sie keine nachfolgenden Änderungen widerspiegeln.
Das Skript und die IAM-Richtlinie basieren auf der Antwort von itaifrenkel.
quelle
aws:autoscaling:groupName
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/EC2_TAG_\1="\2"/' |sed -r 's/aws:autoscaling:/aws_autoscaling_/' > /etc/ec2-tags
Wenn Sie sich nicht in der Standardverfügbarkeitszone befinden, werden die Ergebnisse des Überdenkens leer zurückgegeben.
Wenn Sie einen Filter hinzufügen möchten, um ein bestimmtes Tag zu erhalten (elastischer Bohnenstiel: Umgebungsname in meinem Fall), können Sie dies tun.
Und um nur den Wert für das Tag zu erhalten, nach dem ich gefiltert habe, leiten wir das fünfte Feld aus.
quelle
elasticbeanstalk:environment-name
mitName
Für Python:
quelle
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
Sie können alternativ den
describe-instances
CLI-Aufruf verwenden, anstattdescribe-tags
:Dieses Beispiel zeigt, wie der Wert des Tags 'my-tag-name' für die Instanz ermittelt wird:
Ändern Sie die Region entsprechend Ihren örtlichen Gegebenheiten. Dies kann nützlich sein, wenn Ihre Instanz über die Berechtigung zum Beschreiben von Instanzen verfügt, jedoch nicht über Beschreibungs-Tags in der Instanzprofilrichtlinie
quelle
Mithilfe der AWS-APIs "Benutzerdaten" und "Metadaten" kann ein Skript geschrieben werden, das die Puppe umschließt, um einen Puppenlauf mit einem benutzerdefinierten Zertifikatsnamen zu starten.
Starten Sie zuerst eine aws-Instanz mit benutzerdefinierten Benutzerdaten: 'role: webserver'
Dadurch wird Puppet mit einem Zertifikatsnamen wie "webserver.i-hfg453.aws" aufgerufen. Anschließend können Sie ein Knotenmanifest mit dem Namen "webserver" erstellen. Puppets "Fuzzy Node Matching" bedeuten, dass alle Webserver bereitgestellt werden.
In diesem Beispiel wird davon ausgegangen, dass Sie auf einem Basis-Image mit installierter Puppe usw. aufbauen.
Leistungen:
1) Sie müssen Ihre Anmeldeinformationen nicht weitergeben
2) Mit den Rollenkonfigurationen können Sie so detailliert sein, wie Sie möchten.
quelle
Ich habe Folgendes zusammengestellt, das hoffentlich einfacher und sauberer ist als einige der vorhandenen Antworten und nur die AWS-CLI und keine zusätzlichen Tools verwendet.
Dieses Codebeispiel zeigt, wie der Wert des Tags 'myTag' für die aktuelle EC2-Instanz abgerufen wird:
Verwenden von Beschreibungs-Tags :
Oder alternativ mit Beschreibungsinstanzen :
quelle
Eine Variation einiger der obigen Antworten, aber auf diese Weise habe ich den Wert eines bestimmten Tags aus dem Benutzerdatenskript einer Instanz erhalten
quelle
Installieren Sie AWS CLI:
Holen Sie sich die Tags für die aktuelle Instanz:
Ausgänge:
Verwenden Sie ein bisschen Perl, um die Tags zu extrahieren:
Kehrt zurück:
quelle
ec2metadata
ist nicht in aws-cli, kann aber durch ersetzt werdencurl --silent http://169.254.169.254/latest/meta-data/instance-id
. Außerdemjq
kann das JSON einfacher analysiert werden, oder ein anderes Ausgabeformat ist noch einfacher.sudo apt-get -y install python
undexport AWS_DEFAULT_REGION=us-west-1
instance-id: i-07f59f3564618f148
Laden Sie dazu eine eigenständige ausführbare Datei herunter und führen Sie sie aus.
Manchmal kann man awscli nicht installieren, was von Python abhängt. Docker könnte auch nicht im Bild sein.
Hier ist meine Implementierung in Golang: https://github.com/hmalphettes/go-ec2-describe-tags
quelle
Jq + ec2metadata macht es ein bisschen schöner. Ich benutze cf und habe Zugang zur Region. Andernfalls können Sie es in Bash greifen.
quelle
Für diejenigen, die verrückt genug sind, um Fish Shell auf EC2 zu verwenden, ist hier ein praktischer Ausschnitt für Ihren /home/ec2-user/.config/fish/config.fish. Der Befehl hostdata listet jetzt alle Ihre Tags sowie die öffentliche IP und den Hostnamen auf.
quelle