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.
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:
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;
jq
json ayrıştırmak için komut kullanabilirsiniz
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 '.[]'
this creates many "describe-instances" requests
ve? Anladığım kadarıyla sorgunuz sadece evrensel değil,
AWS API'sının ince belgelerine bir göz atın. Aws-cli araçları aws otomatik ölçekleme-otomatik ölçeklendirme-örnekleri ve aws-ec2 açıklama-örnekleri .
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
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
jq
yararlı bir araç olduğunu düşünüyorum ve burada bırakmak ops insanların keşfetmesine izin verebilir, amazon ile her şeyi aws
komutla yapabilirseniz
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.)
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/'))