मैं ऐसे सभी उदाहरणों के निजी आईपी पते कैसे प्राप्त कर सकता हूं, जो किसी ऑटोकल्किंग समूह का हिस्सा हैं। मैं उन सभी उदाहरणों पर कुछ ऑपरेशन करने की कोशिश कर रहा हूं जो एक ऑटोस्कोलिंग समूह का हिस्सा हैं।
मैं ऐसे सभी उदाहरणों के निजी आईपी पते कैसे प्राप्त कर सकता हूं, जो किसी ऑटोकल्किंग समूह का हिस्सा हैं। मैं उन सभी उदाहरणों पर कुछ ऑपरेशन करने की कोशिश कर रहा हूं जो एक ऑटोस्कोलिंग समूह का हिस्सा हैं।
जवाबों:
मैंने IP लिस्ट प्राप्त करने के लिए नीचे की तरह एक छोटी स्क्रिप्ट लिखी है:
#! / Bin / bash के लिए मैं `aws ऑटो-स्केलिंग विवरण-ऑटो-स्केलिंग-समूह - ऑटो-स्केलिंग-समूह-नाम ASGName | grep- आई इंस्टिड | awk '{प्रिंट $ 2}' | cut -d ',' -f1 | sed -e 's / "// g'` कर aws ec2 वर्णन-दृष्टांत --instance-ids $ i | grep -i PrivateIpAddress | awk '{प्रिंट $ 2}' | सिर -1 | कट -d "," -f1 किया हुआ;
jq
कमांड को पार्स जोंस
विकल्प के रूप में, बिना किसी 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
एडब्ल्यूएस एपीआई के लिए ठीक दस्तावेज पर एक नज़र डालें। जैसे aws-cli टूल्स aws autoscaling description-auto-scaling-instances और aws ec2 वर्णन-इंस्टेंस ।
रमेश के जवाब के समान ही वर्तमान उदाहरण और उसके समूह पर आधारित एक अच्छी स्क्रिप्ट है। अपना क्षेत्र सेट करना सुनिश्चित करें और इस मामले में मैं वर्तमान उदाहरण (क्लस्टरिंग के लिए उपयोग) को छोड़ देता हूं। आवश्यकता पड़ने पर आप PrivateIpAddress को भी बदल सकते हैं।
#!/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
आप EC2 -> ऑटो स्केलिंग समूहों -> इंस्टेंस टैब के तहत AWS वेब कंसोल UI में भी देख सकते हैं। आपको वर्तमान एएसजी के तहत सभी उदाहरण दिखाई देंगे, फिर आप आईपी प्राप्त करने के लिए प्रत्येक इंस्टेंस-आईडी पर क्लिक कर सकते हैं (यह आपको अलग-अलग दृश्य में रीडायरेक्ट करेगा।)
यह एक ASG में उदाहरण के सभी निजी ips को वापस कर देगा
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/'))