Rufen Sie den Namen der Autoscaling-Gruppe in AWS ab

8

Leute, ich schreibe ein Skript, das die Tags für eine laufende Instanz als Umgebungsvariablen exportiert. Das Problem bei der automatischen Skalierung von Gruppen besteht darin, dass diese Tags der Instanz nicht zur Verfügung stehen.

Woher weiß man über api / aws cli-Befehle, zu welcher Autoscaling-Gruppe eine Instanz gehört? Ich muss Instanz-Tags in Skripten verwenden, diese sind jedoch nicht verfügbar. Vorschläge?

Vielen Dank!

CMag
quelle

Antworten:

8

Woher weiß man über api / aws cli-Befehle, zu welcher Autoscaling-Gruppe eine Instanz gehört?

Sie können den autoscaling describe-auto-scaling-instancesBefehl zusammen mit der folgenden Option verwenden --instance-ids:

aws autoscaling describe-auto-scaling-instances --instance-ids="i-zzxxccvv"

Das Problem bei der automatischen Skalierung von Gruppen besteht darin, dass diese Tags der Instanz nicht zur Verfügung stehen. [...] Ich muss Instanz-Tags in Skripten verwenden, diese sind jedoch nicht verfügbar. Vorschläge?

Ich interpretiere dies so, wie Sie die Tags der Autoscaling-Gruppe erhalten möchten, zu der die Instanz gehört. Mit dem AutoScalingGroupNamevom oben gezeigten Befehl zurückgegebenen Befehl können Sie den folgenden Befehl verwenden:

aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=name-of-the-auto-scaling-group-here
Bazze
quelle
4
Dies ist auch hilfreich, wenn Sie versuchen, den ASG-Namen im UserData-Skript einer LaunchConfig in einer CloudFormation-Vorlage abzurufen. Wenn Sie a verwenden Ref, entsteht eine zirkuläre Abhängigkeit zwischen der Startkonfiguration und dem ASG. Daher müssen Sie die automatische Skalierungs-CLI verwenden.
Ryan Gross
5

Der einfachste Weg, die Autoscaling-Gruppe einer Instanz zu finden, besteht darin, die Tags zu untersuchen. Alle Instanzen in einer Autoscaling-Gruppe haben ein Tag mit dem Namen aws:autoscaling:groupName, das den Gruppennamen enthält. Sie können dieses Tag mit dem folgenden Befehl abrufen:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" "Name=key,Values=aws:autoscaling:groupName"

Dann können Sie die Tags wie von Bazze beschrieben greifen.

Eine alternative Lösung besteht darin, die Tags von der Autoscaling-Gruppe an die Instanz weiterzugeben.

Wenn Sie Cloudformation zum Erstellen der ASG verwenden, legen Sie diese "PropagateAtLaunch": "true"für jedes Tag fest, das Sie weitergeben möchten (siehe Aws Cloud Formation Docs ).

Wenn Sie die Gruppe manuell erstellen, aktivieren Sie das Kontrollkästchen "Neue Instanzen markieren" für jedes Tag.

Sobald Sie dies getan haben, werden die Tags in die Instanz kopiert und Sie können die Tags Ihrer Instanz einfach mit dem Befehl beschreiben Tags überprüfen:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}"

Ich finde es jqhilfreich, die Ausgabe des aws cli-Tools zu verarbeiten. Mit dem folgenden Befehl wird beispielsweise eine key=valueListe aus dem JSON erstellt:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" | jq -r '.Tags[] | @text "\(.Key)=\(.Value)"'
Sihil
quelle
1

Um alles zusammenzufassen:

INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
ASG_NAME=`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID"  --region us-east-2 | jq '.Tags[] | select(.["Key"] | contains("aws:autoscaling:groupName")) | .Value'`
ASG_NAME=`echo $ASG_NAME | tr -d '"'`

Tun Sie eine echo $ASG_NAMEund Sie sollten es sehen.

ErnieAndBert
quelle