Come posso ottenere indirizzi IP privati di tutte le istanze che fanno parte di un gruppo di AutoScaling. Sto cercando di eseguire alcune operazioni su tutte le istanze che fanno parte di un gruppo con scalabilità automatica.
Come posso ottenere indirizzi IP privati di tutte le istanze che fanno parte di un gruppo di AutoScaling. Sto cercando di eseguire alcune operazioni su tutte le istanze che fanno parte di un gruppo con scalabilità automatica.
Risposte:
Ho scritto un piccolo script come di seguito per ottenere l'elenco IP:
#! / Bin / bash per i in `aws ridimensionamento automatico gruppi-ridimensionamento automatico - nome-gruppo-ridimensionamento automatico ASGName | grep -i instanceid | awk '{print $ 2}' | cut -d ',' -f1 | sed -e 's / "// g'` fare aws ec2 descrivono istanze --instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | testa -1 | cut -d "," -f1 fatto;
jq
comando per analizzare json
In alternativa, la mia versione senza 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
Versione più ottimizzata
# 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"
]
Se è necessario solo un semplice elenco nell'output, è possibile aggiungere un'altra pipeline
| jq -r '.[]'
this creates many "describe-instances" requests
e? Per quanto ho capito, la tua query funzionerà solo con tag non universali, imho
Dai un'occhiata alla documentazione eccellente per l'API AWS. Ad esempio, gli strumenti aws-cli aws autoscaling descrivono-istanze di ridimensionamento automatico e aws ec2 descrivono-istanze .
Simile alla risposta di Ramesh qui è un bel piccolo script basato sull'istanza corrente e sul suo gruppo. Assicurati di impostare la tua regione e in questo caso salto l'istanza corrente (utilizzata per il clustering). Se necessario, puoi anche modificare PrivateIpAddress in Pubblico.
#!/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
puoi anche usare jq
per analizzare l'output, è una cattiva idea usare awk, grep, o sed, ecc., per analizzare una struttura di nodi, come se fosse una cattiva idea usare espressioni regolari per analizzare 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
sia uno strumento utile, e lasciarlo qui potrebbe far scoprire a tutti gli operatori, anche se con Amazon puoi fare tutto con il aws
comando
Puoi anche consultare l'interfaccia utente della console Web AWS in EC2 -> Gruppi di ridimensionamento automatico -> Scheda Istanze. Vedrai tutte le istanze nell'ASG corrente, puoi quindi fare clic su ciascun ID istanza per ottenere l'IP (ti reindirizzerà a una vista diversa).
Ciò restituirà tutte le IP private delle istanze in un 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/'))