Ich normalerweise Tags als Umgebungsvariablen beim Booten laden, indem Sie ein UserData-Skript ausführen. Abhängig von der Instanz ändere ich die Parameter --query
und --filter
auf den describe-instances
Aufruf, aber ansonsten bleibt das Skript gleich. HINWEIS: Im folgenden Beispiel sind das Tag Name
und Tags mit :
nicht enthalten. Ändern Sie dieses Verhalten entsprechend Ihren Anforderungen.
#!/bin/bash -v
apt-get update
apt-get -y install awscli
# add boot script which loads environment variables
cat > /etc/profile.d/export_instance_tags.sh << 'EndOfMessage'
# fetch instance info
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
INSTANCE_AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
INSTANCE_REGION="`echo \"$INSTANCE_AZ\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
# export instance tags
export_statement=$(aws ec2 describe-tags --region "$INSTANCE_REGION" --filters "Name=resource-id,Values=$INSTANCE_ID" --query 'Tags[?!contains(Key, `Name`) && !contains(Key, `:`)].[Key,Value]' --output text | sed -E 's/^([^\s\t]+)[\s\t]+([^\n]+)$/export \1="\2"/g')
eval $export_statement
# export instance info
export INSTANCE_ID
export INSTANCE_AZ
export INSTANCE_REGION
EndOfMessage
Es läuft describe-tags
Alle Tags aufzulisten, formatiert die Ausgabe in eine Folge von Export-Anweisungen mit sed
führt dann das Ergebnis mit eval
Erstellt gerade eine verbesserte Version der oben bereitgestellten Lösung unter https://gist.github.com/marcellodesales/a890b8ca240403187269 –