ऑटोकैसलिंग समूह इंस्टेंसेस आईपी एड्रेस कैसे प्राप्त करें


17

मैं ऐसे सभी उदाहरणों के निजी आईपी पते कैसे प्राप्त कर सकता हूं, जो किसी ऑटोकल्किंग समूह का हिस्सा हैं। मैं उन सभी उदाहरणों पर कुछ ऑपरेशन करने की कोशिश कर रहा हूं जो एक ऑटोस्कोलिंग समूह का हिस्सा हैं।

जवाबों:


17

मैंने 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
किया हुआ;

मेरे सभी हाथों से उत्थान
जमील ग्रैंड

डाउनवोट क्योंकि यह grep और awk के साथ json को पार्स करने के लिए
नासमझ है

आप jqकमांड को पार्स जोंस
चेस टी।

बिल्कुल सही जवाब, धन्यवाद।
जॉन हम्फ्रीज़ - w00te

12

विकल्प के रूप में, बिना किसी 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 '.[]'


यह कई "वर्णन-उदाहरण" अनुरोध बनाता है, मेरा केवल एक ही मेरा मतलब है, आप इसे केवल ट्वोम बना सकते हैं, लेकिन आपको xargs का उपयोग बंद करना होगा
xenoterracide

this creates many "describe-instances" requestsतथा? जहाँ तक मैं समझता था कि आपकी क्वेरी केवल टैग के साथ काम करेगी, यह सार्वभौमिक नहीं है, imho
ALex_hha

आपका कोई सार्वभौमिक नहीं है या तो मैं वास्तव में अपने प्रश्नों में नाम का उपयोग नहीं कर सकता यह एक उत्पन्न नाम है जो एक स्वचालित प्रणाली का हिस्सा है। बिंदु यह है कि एक 10 प्लस 1 आरपीसी अनुरोध बनाता है इसलिए यह धीमा होगा कि आपके पास कितने उदाहरण हैं
xenoterracide

वास्तव में ओपी ने यह निर्दिष्ट नहीं किया कि उसे खोज करने के लिए किन मानदंडों की आवश्यकता है, इसलिए यह एक ग्रे क्षेत्र है :)
ALEX_hha

हां मुझे पता है इसलिए मैं सिर्फ सुझाव दे रहा था कि आप प्रश्नों को अधिक कुशल बना सकते हैं
xenoterracide


1

रमेश के जवाब के समान ही वर्तमान उदाहरण और उसके समूह पर आधारित एक अच्छी स्क्रिप्ट है। अपना क्षेत्र सेट करना सुनिश्चित करें और इस मामले में मैं वर्तमान उदाहरण (क्लस्टरिंग के लिए उपयोग) को छोड़ देता हूं। आवश्यकता पड़ने पर आप 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

1

आप 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

JFYI: aws cli alredy - फ़िल्टर के माध्यम से json फ़िल्टर कर सकते हैं।
ALex_hha

ठीक उसी तरह से काम करने के लिए प्रतीत नहीं होता है
xenoterracide

लेकिन हां, यह करने का एक और तरीका है।
xenoterracide

मेरे संस्करण पर एक नज़र डालें
ALex_hha

मैं इसे यहां छोड़ने जा रहा हूं, क्योंकि भले ही यह सबसे अच्छा जवाब नहीं है, मुझे लगता jqहै कि यह एक उपयोगी उपकरण है, और इसे यहां छोड़ने से ऑप्स लोगों को पता चल सकता है, भले ही aws
अमेज़ॅन के

0

आप EC2 -> ऑटो स्केलिंग समूहों -> इंस्टेंस टैब के तहत AWS वेब कंसोल UI में भी देख सकते हैं। आपको वर्तमान एएसजी के तहत सभी उदाहरण दिखाई देंगे, फिर आप आईपी प्राप्त करने के लिए प्रत्येक इंस्टेंस-आईडी पर क्लिक कर सकते हैं (यह आपको अलग-अलग दृश्य में रीडायरेक्ट करेगा।)


हां, लेकिन मुझे पूरी सूची चाहिए, मेरे पास 100 से अधिक उदाहरणों के साथ एएसजी है और कुछ सामानों को लागू करने के लिए आईपी की सूची चाहिए।
रमेश कुमार

नीचे छोटी स्क्रिप्ट है जो मैंने आईपी सूची प्राप्त करने के लिए लिखी थी।
रमेश कुमार

उस स्थिति में मैं cli का उपयोग करूँगा, आप सही हैं।
माइंडब्लॉव्न

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

यह एक 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/'))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.