Cara mendapatkan alamat IP Kelompok Autoscaling Instances


16

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:


16

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;

menang dengan tangan saya
Jameel Grand

downvote karena tidak bijaksana untuk mengurai json dengan grep dan awk
xenoterracide

Anda dapat menggunakan jqperintah untuk mengurai json
Chase T.

Jawaban sempurna, terima kasih.
John Humphreys - w00te

10

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 '.[]'


ini menciptakan banyak permintaan "jelaskan-instance", milik saya hanya membuat satu maksud saya, Anda bisa membuatnya hanya membuat dua, tetapi Anda harus berhenti menggunakan xargs
xenoterracide

this creates many "describe-instances" requestsdan? Sejauh yang saya mengerti permintaan Anda hanya akan berfungsi dengan tag itu tidak universal, imho
ALex_hha

Milikmu bukan Universal, aku juga tidak bisa benar-benar menggunakan nama itu di kueri. Itu nama yang dihasilkan yang merupakan bagian dari sistem otomatis. Intinya adalah ini menciptakan permintaan 10 ditambah 1 RPC oleh karena itu akan lambat tergantung pada berapa banyak contoh yang Anda miliki
xenoterracide

Sebenarnya OP tidak menentukan dengan kriteria apa dia perlu melakukan pencarian, jadi ini adalah area abu-abu :)
ALex_hha

Ya saya tahu jadi saya hanya menyarankan agar Anda dapat membuat kueri lebih efisien
xenoterracide


1

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

1

Anda juga dapat menggunakan jquntuk 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

JFYI: aws cli alredy dapat memfilter json melalui opsi --query.
ALex_hha

Tampaknya tidak bekerja dengan cara yang persis sama
xenoterracide

tapi ya, itu cara lain untuk melakukannya.
xenoterracide

lihat saja versi saya
ALex_hha

Saya akan meninggalkan ini di sini, karena walaupun itu bukan jawaban terbaik, saya pikir jqini adalah alat yang berguna, dan meninggalkannya di sini mungkin membiarkan orang-orang ops menemukannya, bahkan jika dengan amazon Anda dapat melakukan semuanya dengan awsperintah
xenoterracide

0

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.)


Ya, Tapi saya ingin daftar lengkap, saya punya ASG dengan lebih dari 100 contoh dan ingin daftar IP untuk menerapkan beberapa hal.
Ramesh Kumar

Di bawah ini adalah skrip kecil yang saya tulis untuk mendapatkan daftar IP.
Ramesh Kumar

dalam hal ini saya akan menggunakan cli, Anda benar.
mindblowwn

0
$instanceIPs = aws ec2 describe-instances --filters "Name=tag:Name,Values=<name-of-your-auto-scaling-group>" --query 'Reservations[].Instances[].PrivateDnsName' --output text

$instanceIPsArray = $instanceIPs.Trim() -split("`t")
foreach($ip in $instanceIPsArray)
{
    //Do something
}

0

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/'))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.