Jak mogę uzyskać prywatne adresy IP wszystkich instancji, które są częścią grupy AutoScaling. Próbuję wykonać operację na wszystkich instancjach należących do grupy skalowania automatycznego.
Jak mogę uzyskać prywatne adresy IP wszystkich instancji, które są częścią grupy AutoScaling. Próbuję wykonać operację na wszystkich instancjach należących do grupy skalowania automatycznego.
Odpowiedzi:
Napisałem mały skrypt, jak poniżej, aby uzyskać listę adresów IP:
#! / bin / bash for i in `aws autoskalowanie opisz-auto-skalowanie grup -auto-skalowanie-nazwa-grupy ASGName | grep -i instanceid | awk '{print 2 USD}' | cut -d ',' -f1 | sed -e 's / "// g'` robić aws ec2 description-instances --instance-ids $ i | grep -i PrivateIpAddress | awk '{print 2 USD}' | głowa -1 | cut -d "," -f1 gotowy;
jq
polecenia do parsowania json
Alternatywnie, moja wersja bez jq / awk / sed / cut
$ aws autoscaling describe-auto-scaling-instances --region us-east-1 --output text \
--query "AutoScalingInstances[?AutoScalingGroupName=='ASG-GROUP-NAME'].InstanceId" \
| xargs -n1 aws ec2 describe-instances --instance-ids $ID --region us-east-1 \
--query "Reservations[].Instances[].PrivateIpAddress" --output text
10.228.43.71
10.230.178.160
10.228.15.171
10.233.160.163
10.228.18.123
10.225.222.195
10.237.149.97
10.136.163.109
10.152.35.71
10.233.157.230
Bardziej zoptymalizowana wersja
# aws ec2 describe-instances --region us-east-1 --instance-ids \
$(aws autoscaling describe-auto-scaling-instances --region us-east-1 --output text \
--query "AutoScalingInstances[?AutoScalingGroupName=='ASG_NAME'].InstanceId") \
--query "Reservations[].Instances[].PrivateIpAddress"
[
"10.230.178.160",
"10.152.35.71",
"10.233.157.230",
"10.237.149.97",
"10.228.15.171",
"10.136.163.109",
"10.225.222.195",
"10.233.160.163",
"10.228.43.71",
"10.228.18.123"
]
Jeśli potrzebujesz tylko prostej listy w danych wyjściowych, możesz dodać kolejny potok
| jq -r '.[]'
this creates many "describe-instances" requests
i? O ile rozumiem, twoje zapytanie będzie działać tylko z tagami, nie jest uniwersalne,
Zobacz dokładną dokumentację interfejsu API AWS. Np. Narzędzia aws-cli automatyczne skalowanie aws opisz-automatyczne-skalowanie-instancje i aws ec2 opisz-instancje .
Podobna do odpowiedzi Ramesha tutaj jest ładny mały skrypt oparty na bieżącej instancji i jej grupie. Upewnij się, że ustawiłeś swój region. W tym przypadku pomijam bieżącą instancję (używaną do tworzenia klastrów). W razie potrzeby możesz także zmienić PrivateIpAddress na Public.
#!/bin/bash
wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
sudo chmod u+x ec2-metadata
INSTANCE_ID=$(./ec2-metadata | grep instance-id | awk 'NR==1{print $2}')
AG_NAME=$(aws autoscaling describe-auto-scaling-instances --instance-ids ${INSTANCE_ID} --region eu-west-1 --query AutoScalingInstances[].AutoScalingGroupName --output text)
for ID in $(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ${AG_NAME} --region eu-west-1 --query AutoScalingGroups[].Instances[].InstanceId --output text);
do
if [ "${ID}" == ${INSTANCE_ID} ] ; then
continue;
fi
IP=$(aws ec2 describe-instances --instance-ids $ID --region eu-west-1 --query Reservations[].Instances[].PrivateIpAddress --output text)
# Do what you want with ${IP} here
done
możesz także użyć jq
do parsowania danych wyjściowych, złym pomysłem jest użycie awk, grep lub sed, itp. do parsowania struktury węzłów, podobnie jak złym pomysłem jest używanie wyrażeń regularnych do parsowania html.
$ aws ec2 describe-instances \
--instance-ids $(aws autoscaling describe-auto-scaling-groups \
|jq -r '.AutoScalingGroups[]| select( .Tags[].Value == "playground").Instances[].InstanceId' \
|paste -s -d" ") \
| jq -r '.Reservations[].Instances[].PrivateIpAddress'
192.169.0.202
192.169.0.177
192.169.0.160
jq
jest to przydatne narzędzie, a pozostawienie go tutaj może pozwolić ops ludziom odkryć to, nawet jeśli dzięki aws
Możesz także zajrzeć do interfejsu konsoli AWS w interfejsie EC2 -> Grupy skalowania automatycznego -> Karta Instancje. Zobaczysz wszystkie instancje w bieżącym ASG, możesz następnie kliknąć ID każdej instancji, aby uzyskać adres IP (przekieruje Cię do innego widoku).
Zwróci to wszystkie prywatne IP instancji w ASG
PRIVATEIPS=$(aws ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=$(aws autoscaling describe-auto-scaling-instances --instance-ids="$(ec2metadata --instance-id)" | jq -r '.AutoScalingInstances[].AutoScalingGroupName')" --query 'Reservations[].Instances[].PrivateIpAddress' --output text --region $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/'))