Comment puis-je obtenir des adresses IP privées de toutes les instances qui font partie d'un groupe AutoScaling. J'essaie de faire une opération sur toutes les instances qui font partie d'un groupe de mise à l'échelle automatique.
Comment puis-je obtenir des adresses IP privées de toutes les instances qui font partie d'un groupe AutoScaling. J'essaie de faire une opération sur toutes les instances qui font partie d'un groupe de mise à l'échelle automatique.
Réponses:
J'ai écrit un petit script comme ci-dessous pour obtenir la liste IP:
#! / bin / bash pour i dans `aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}' | cut -d ',' -f1 | sed -e 's / "// g'` faire aws ec2 describe-instances --instance-ids $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | tête -1 | cut -d "," -f1 terminé;
jq
commande pour analyser json
Comme alternative, ma version sans 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
Version plus optimisée
# 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 vous avez juste besoin d'une simple liste dans la sortie, vous pouvez ajouter un autre pipeline
| jq -r '.[]'
this creates many "describe-instances" requests
et? Pour autant que je sache, votre requête ne fonctionnera qu'avec des balises, ce n'est pas universel, à mon humble avis
Jetez un œil à la fine documentation de l'API AWS. Par exemple, les outils aws-cli aws autoscaling describe-auto-scaling-instances et aws ec2 describe-instances .
Similaire à la réponse de Ramesh, voici un joli petit script basé sur l'instance actuelle et son groupe. Assurez-vous de définir votre région et dans ce cas, je saute l'instance actuelle (utilisée pour le clustering). Vous pouvez également changer PrivateIpAddress en Public si nécessaire.
#!/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
vous pouvez également utiliser jq
pour analyser la sortie, c'est une mauvaise idée d'utiliser awk, grep ou sed, etc., pour analyser une structure de nœud, similaire à une mauvaise idée d'utiliser des expressions régulières pour analyser 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
c'est un outil utile, et le laisser ici peut laisser les ops le découvrir, même si avec amazon vous pouvez tout faire avec la aws
commande
Vous pouvez également consulter l'interface utilisateur de la console Web AWS sous EC2 -> Groupes Auto Scaling -> onglet Instances. Vous verrez toutes les instances sous l'ASG actuel, vous pouvez ensuite cliquer sur chaque instance-ID pour obtenir l'IP (il vous redirigera vers une vue différente.)
Cela renverra toutes les ips privées des instances dans 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/'))