Autoscaling group Instances IP adreslerini alma


17

Bir AutoScaling grubunun parçası olan tüm örneklerin özel IP adreslerini nasıl alabilirim? Bir otomatik ölçekleme grubunun parçası olan tüm durumlarda bazı işlemler yapmaya çalışıyorum.

Yanıtlar:


17

IP listesini almak için aşağıdaki gibi küçük bir komut dosyası yazdım:

#! / Bin / bash
aws için otomatik ölçeklendirme açıkla-otomatik ölçeklendirme grupları - otomatik ölçekleme grubu adı ASGName | grep -i instanceid | awk '{2 $ yazdır}' | kes -d ',' -f1 | sed -e 's / "// g'`
yapmak
aws ec2 tanım örnekleri - instance-ids $ i | grep -i ÖzelIpAdresi | awk '{2 $ yazdır}' | kafa -1 | kes -d "," -f1
yapılan;

tüm ellerimle upvoting
Jameel Grand

json'u grep ve awk ile ayrıştırmak akıllıca olmadığından
aşağı oy verin

jqjson ayrıştırmak için komut kullanabilirsiniz
Chase T.

Mükemmel cevap, teşekkür ederim.
John Humphreys - w00te

11

Alternatif olarak, herhangi bir jq / awk / sed / cut içermeyen sürümüm

$ 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

Daha optimize edilmiş sürüm

# 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"
]

Çıktıda yalnızca düz bir listeye ihtiyacınız varsa başka bir ardışık düzen ekleyebilirsiniz

| jq -r '.[]'


Bu birçok "açıklama örneği" isteği oluşturur, benimki sadece bir tane oluşturur yani, sadece twom oluşturabilirsin, ama xargs kullanmayı bırakmalısın
xenoterracide

this creates many "describe-instances" requestsve? Anladığım kadarıyla sorgunuz sadece evrensel değil,
imho

Seninki Evrensel değil ya da aslında sorgularımdaki adı kullanamıyorum, otomatik bir sistemin parçası olan oluşturulmuş bir isim. Bu, 10 artı 1 RPC isteği oluşturduğu için kaç örneğiniz olduğuna bağlı olarak yavaş olacaktır
xenoterracide 13:17

Aslında OP arama yapmak için hangi kriterlere ihtiyacı olduğunu belirtmedi, bu yüzden gri bir alan :)
ALex_hha

Evet biliyorum, sadece sorguları daha verimli hale
getirmenizi öneriyordum


1

Ramesh'in cevabına benzer şekilde, mevcut örneğe ve grubuna dayanan güzel bir senaryo var. Bölgenizi ayarladığınızdan emin olun ve bu durumda geçerli örneği atladım (kümeleme için kullanılır). Gerekirse PrivateIpAddress'i Genel olarak da değiştirebilirsiniz.

#!/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

jqçıktıyı ayrıştırmak için de kullanabilirsiniz , bir düğüm yapısını ayrıştırmak için awk, grep veya sed vb.

$ 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 json'u --query seçeneği ile filtreleyebilir.
ALex_hha

Tam olarak aynı şekilde çalışmıyor gibi görünüyor
xenoterracide

ama evet, bunu yapmanın başka bir yolu.
xenoterracide

sadece benim versiyonum bir göz atın
ALex_hha

Bunu burada bırakacağım, çünkü en iyi cevap olmasa bile, jqyararlı bir araç olduğunu düşünüyorum ve burada bırakmak ops insanların keşfetmesine izin verebilir, amazon ile her şeyi awskomutla yapabilirseniz
xenoterracide

0

AWS web konsolu kullanıcı arayüzüne EC2 -> Otomatik Ölçekleme Grupları -> Örnekler Sekmesi altında da bakabilirsiniz. Geçerli ASG altındaki tüm örnekleri göreceksiniz, daha sonra IP'yi almak için her bir örnek kimliğine tıklayabilirsiniz (Sizi farklı görünüme yönlendirecektir.)


Evet, ancak tam listeyi istiyorum, 100'den fazla örneği olan ASG var ve bazı şeyleri uygulamak için IP'lerin bir listesini istiyorum.
Ramesh Kumar

IP listesini almak için yazdığım küçük komut dosyası aşağıdadır.
Ramesh Kumar

bu durumda cli kullanırdım, haklısın.
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

Bu, bir ASG'deki tüm özel ips değerlerini döndürür

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/'))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.