¿Cómo puedo obtener direcciones IP privadas de todas las instancias que forman parte de un grupo de AutoScaling? Estoy tratando de hacer alguna operación en todas las instancias que forman parte de un grupo de autoescalado.
¿Cómo puedo obtener direcciones IP privadas de todas las instancias que forman parte de un grupo de AutoScaling? Estoy tratando de hacer alguna operación en todas las instancias que forman parte de un grupo de autoescalado.
Respuestas:
He escrito un pequeño script como el siguiente para obtener la lista de IP:
#! / bin / bash para i en `aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}' | cortar -d ',' -f1 | sed -e 's / "// g'` hacer aws ec2 describe-instancias --instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | cabeza -1 | cortar -d "," -f1 hecho;
jq
comando para analizar json
Como alternativa, mi versión sin 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
Versión más optimizada
# 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"
]
Si solo necesita una lista simple en la salida, puede agregar otra tubería
| jq -r '.[]'
this creates many "describe-instances" requests
¿y? Según tengo entendido, su consulta solo funcionará con etiquetas que no son universales, en mi humilde opinión
Eche un vistazo a la excelente documentación de la API de AWS. Por ejemplo, las herramientas aws-cli aws autoscaling describe-auto-scaling-instancia y aws ec2 describe-instancia .
Similar a la respuesta de Ramesh aquí hay un pequeño guión agradable basado en la instancia actual y su grupo. Asegúrese de establecer su región y en este caso omito la instancia actual (utilizada para la agrupación en clúster). También puede cambiar PrivateIpAddress a Public si es necesario.
#!/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
también puede usar jq
para analizar la salida, es una mala idea usar awk, grep o sed, etc., para analizar una estructura de nodo, similar a que sea una mala idea usar expresiones regulares para analizar 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
es una herramienta útil, y dejarlo aquí puede permitir que las personas lo descubran, incluso si con Amazon puedes hacerlo todo con el aws
comando
También puede buscar en la interfaz de usuario de la consola web de AWS en EC2 -> Grupos de escalado automático -> Pestaña Instancias. Verá todas las instancias bajo ASG actual, luego puede hacer clic en cada ID de instancia para obtener la IP (lo redirigirá a una vista diferente).
Esto devolverá todos los ips privados de instancias en 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/'))