Як я можу отримати приватні IP-адреси всіх примірників, що входять до групи автоматичного масштабування. Я намагаюся зробити деяку операцію над усіма примірниками, які входять до групи автоматичного масштабування.
Як я можу отримати приватні IP-адреси всіх примірників, що входять до групи автоматичного масштабування. Я намагаюся зробити деяку операцію над усіма примірниками, які входять до групи автоматичного масштабування.
Відповіді:
Я написав невеликий сценарій, як нижче, щоб отримати список IP:
#! / бін / баш для я в `aws автоматичне масштабування описує-авто-масштабування -групи --авто-масштабування-ім'я групи ASGName | grep -i instanceid | awk '{print $ 2}' | вирізати -d ',' -f1 | sed -e 's / "// g'` робити aws ec2 описує-екземпляри --instica-ID $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | голова -1 | вирізати -d "," -f1 зроблено;
jq
команду для розбору json
Як альтернатива, моя версія без жодного 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
Більш оптимізована версія
# 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"
]
Якщо вам потрібен просто простий список у висновку, ви можете додати ще один конвеєр
| jq -r '.[]'
this creates many "describe-instances" requests
і? Наскільки я зрозумів, ваш запит працюватиме лише з тегами, він не універсальний, imho
Погляньте на точну документацію API AWS. Наприклад, інструменти aws-cli aws автомасштабування описують-авто-масштабування-екземпляри та Aws ec2 опису-екземпляри .
Подібний до відповіді Рамеша тут є хороший маленький сценарій, заснований на поточному екземплярі та його групі. Не забудьте встановити ваш регіон, і в цьому випадку я пропускаю поточний екземпляр (використовується для кластеризації). Ви також можете змінити PrivateIpAddress на 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
ви також можете використовувати jq
для розбору результатів, це погана ідея використовувати awk, grep, або sed тощо, щоб проаналізувати структуру вузла, подібно до того, що це погана ідея використовувати регулярні вирази для розбору 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
, що це корисний інструмент, і залишаючи його тут, можливо, люди з aws
Ви також можете переглянути інтерфейс інтерфейсу веб-консолі AWS у розділі EC2 -> Групи автоматичного масштабування -> Вкладка Примірники. Ви побачите всі екземпляри під поточним ASG, потім можете натиснути на кожен екземпляр-ідентифікатор, щоб отримати IP (він перенаправить вас на інший вигляд.)
Це поверне всі приватні ips екземплярів в 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/'))