Bagaimana saya bisa mendapatkan alamat IP pribadi dari semua instance yang merupakan bagian dari grup AutoScaling. Saya mencoba melakukan beberapa operasi pada semua instance yang merupakan bagian dari grup autoscaling.
Bagaimana saya bisa mendapatkan alamat IP pribadi dari semua instance yang merupakan bagian dari grup AutoScaling. Saya mencoba melakukan beberapa operasi pada semua instance yang merupakan bagian dari grup autoscaling.
Jawaban:
Saya telah menulis skrip kecil seperti di bawah ini untuk mendapatkan daftar IP:
#! / bin / bash untuk saya di `aws autoscaling mendeskripsikan-auto-scaling-groups --auto-scaling-group-name ASGName | grep -i instanceid | awk '{print $ 2}' | cut -d ',' -f1 | sed -e 's / "// g'` melakukan aws ec2 menggambarkan-instance --instance-id $ i | grep -i PrivateIpAddress | awk '{print $ 2}' | kepala -1 | cut -d "," -f1 dilakukan;
jq
perintah untuk mengurai json
Sebagai alternatif, versi saya tanpa 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 yang lebih optimal
# 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"
]
Jika Anda hanya perlu daftar sederhana dalam output, Anda dapat menambahkan pipa lain
| jq -r '.[]'
this creates many "describe-instances" requests
dan? Sejauh yang saya mengerti permintaan Anda hanya akan berfungsi dengan tag itu tidak universal, imho
Lihatlah dokumentasi yang bagus untuk API AWS. Misalnya alat aws-cli aws autoscaling menggambarkan-auto-scaling-instance dan aws ec2 menggambarkan-instance .
Mirip dengan jawaban Ramesh di sini adalah skrip kecil yang bagus berdasarkan contoh saat ini dan grupnya. Pastikan untuk mengatur wilayah Anda dan dalam hal ini saya melewatkan contoh saat ini (digunakan untuk pengelompokan). Anda juga dapat mengubah PrivateIpAddress menjadi Publik jika diperlukan.
#!/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
Anda juga dapat menggunakan jq
untuk mem-parsing output, itu ide yang buruk untuk menggunakan awk, grep, atau sed, dll, untuk mem-parsing struktur node, mirip dengan itu menjadi ide yang buruk untuk menggunakan ekspresi reguler ke parse 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
ini adalah alat yang berguna, dan meninggalkannya di sini mungkin membiarkan orang-orang ops menemukannya, bahkan jika dengan amazon Anda dapat melakukan semuanya dengan aws
perintah
Anda juga dapat melihat di konsol web AWS di bawah EC2 -> Grup Penskalaan Otomatis -> Tab Instans. Anda akan melihat semua instance dalam ASG saat ini, Anda kemudian dapat mengklik setiap instance-ID untuk mendapatkan IP (Ini akan mengarahkan Anda ke tampilan yang berbeda.)
Ini akan mengembalikan semua ips pribadi dari instance dalam 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/'))