आप टैग नाम, उदाहरण और उदाहरण आईडी के निजी आईपी पते के साथ कुछ VPC में aws cli का उपयोग करके इंस्टेंस लिस्टिंग के बारे में कैसे जाएंगे?


19

मुझे जो निकटतम मिला है वह निम्नलिखित कमांड का उपयोग कर रहा है।

यह आदेश सभी उदाहरणों की सूची को प्रबंधित करता है।

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-e2f17e8b --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value[]'

यह आदेश सभी निजी आईपी पते, उदाहरण आईडी और उन सभी टैगों को सूचीबद्ध करने का प्रबंधन करता है जिनकी मुझे आवश्यकता नहीं है। मुझे सिर्फ नाम की जरूरत है।

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-e2f17e8b | jq '.Reservations[].Instances[] | {PrivateIpAddress, InstanceId, Tags}'

मुझे यकीन नहीं है कि मैं इस तरह से कमांड निष्पादित नहीं कर सकता:

aws ec2 describe-instances | jq '.["Reservations"]|.[]|.Instances|.[]|.PrivateIpAddress + " " + .InstanceId + " " + .Tags[?Key==`Name`].Value[]'

यह कमांड काम करती है लेकिन इसके सभी टैग कुंजी नाम दिखाते हैं।

aws ec2 describe-instances | jq '.["Reservations"]|.[]|.Instances|.[]|.PrivateIpAddress + " " + .InstanceId + " " + .Tags'

1
क्या आप इन आदेशों को केवल समझने की कोशिश किए बिना कहीं से कॉपी कर रहे हैं?
माइकल हैम्पटन

वास्तव में नहीं, मैंने यह समझने की कोशिश की कि मुझे jq का उपयोग कैसे करना है और मूल json आउटपुट कैसे प्राप्त करना है। हालाँकि, मुझे कोई भी उदाहरण नहीं मिल रहा है कि मैं क्या हासिल करने की कोशिश कर रहा हूं। Nameकुंजी नाम मान आउटपुट के लिए एक फिल्टर के रूप में "टैग [? कुंजी == ] .Value []" का उपयोग करना aws-cli v1.3.0 के बाद ही संभव है। और मैं अपने इच्छित आउटपुट को पाने के लिए --filter और jq के संयोजन का उपयोग कर रहा हूं। निकटतम कमांड aws ec2 वर्णन-इंस्टेंस है --filters नाम = vpc-id, मान = vpc-e2f17e8b | jq '.Reserves [] | इंस्टेंस [] | {PrivateIpAddress, InstanceId, Tags} 'मुझे सिर्फ यह जानना होगा कि टैग कुंजी = नाम का उपयोग jq के संदर्भ में कैसे किया जाए।
कल्पना

जवाबों:


24

उत्तर को सही ढंग से प्रारूपित करने के लिए आपको बैकस्लैश से बचना होगा।

aws ec2 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'

तो यह वास्तविक कमांड है जिसे आप चाहते हैं:

$ aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-ac973bc9 --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'
10.101.255.10   i-91efd39b Server1
10.101.255.9    i-f1e8d4fb Server2

और आप की जरूरत नहीं है .Value[]। आप बस उपयोग कर सकते हैं .Value, और वही आउटपुट देगा।

यह कमाल है, btw। मैं खुद इसे लागू करूंगा!

सुधार: यदि .Value" मूल्य " कोई नहीं है तो ऊपर काम नहीं करेगा । यह बेहतर काम करता है:

$ aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-ac973bc9 --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value[]]' --output text | sed 's/None$/None\n/' | sed '$!N;s/\n/ /'
10.101.255.10   i-91efd39b Server1
10.101.255.9    i-f1e8d4fb Server2
10.101.255.8    i-f6c2450a      None
10.101.255.7    i-34a6afce Server3

क्या आप कृपया अपने sed कमांड को समझा सकते हैं? मुझे एक के बाद एक उदाहरण आईडी / नाम मिल रहे हैं जो हो सकता है क्योंकि मैं sed में अप्रत्यक्ष शेल विस्तार को नहीं समझ रहा हूं।
जोफोरस

3
यदि कोई उदाहरण नामांकित नहीं है (टैग नहीं है: कुंजी = नाम सेट), तो अगला उदाहरण उसी पंक्ति में मुद्रित होता है। पहली sed कमांड उस समस्या को कम करने के लिए स्ट्रिंग "none \ n" को प्रिंट करती है। दूसरी सेड कमांड कमांड लाइनफीड को इंस्टेंस-आईडी से हटा देती है, ताकि टैग: की = नेम स्ट्रिंग उसी लाइन पर प्रिंट हो जाए।
DrStrangepork

8

इसे इस्तेमाल करे

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value|[0],State.Name,PrivateIpAddress,PublicIpAddress]' --output text | column -t

3
आपको अपने कोड के लिए स्पष्टीकरण शामिल करना चाहिए। यह बताते हुए कि यह कोड कैसे और क्यों हल करता है समस्या अधिक उपयोगी है क्योंकि यह ओपी और अन्य पाठकों को इस और इसी तरह के मुद्दों को हल करने में मदद करता है।
एंथनी जी -

यह काम करता है, लेकिन वास्तव में, यह क्यों काम करता है? |किसी प्रकार का फिल्टर है?
aairey

7

उपरोक्त उत्तर ठीक हैं, लेकिन मेरा पसंदीदा वही है;

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType,PrivateIpAddress,PublicIpAddress,Tags[?Key==`Name`].Value[]]' --output json | tr -d '\n[] "' | perl -pe 's/i-/\ni-/g' | tr ',' '\t' | sed -e 's/null/None/g' | grep '^i-' | column -t

वास्तव में, कोई इसे BASH फ़ंक्शन सूची सूची में रख सकता है;

awsls () { aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType,PrivateIpAddress,PublicIpAddress,Tags[?Key==`Name`].Value[]]' --output json | tr -d '\n[] "' | perl -pe 's/i-/\ni-/g' | tr ',' '\t' | sed -e 's/null/None/g' | grep '^i-' | column -t }

तो बस प्रॉम्प्ट से 'awsls' के रूप में कॉल करें


आप एक फ़ाइल में कई फ़ंक्शन कैसे जोड़ते हैं और केवल उस फ़ंक्शन को कहते हैं जिसे आप चाहते हैं?
स्ट्रीकर

2

कुछ इस तरह?

aws ec2 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'

1

मैंने उदाहरण के लिए एक फ़िल्टर जोड़ा "स्थिति"। किसी के लिए उपयोगी होने की स्थिति में इसे यहां पोस्ट करना।

मेरा उपयोग का मामला थोड़ा अलग है, मैं अंसिबल होस्ट फ़ाइलों को उत्पन्न कर रहा हूं ताकि मैं सभी चालू मेजबानों पर निजी आईपी # नाम चाहता हूं।

aws ec2 describe-instances --profile=$PROFILE --filters Name=vpc-id,Values=$VPCID Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed 's/None$/None\n/' | sed '$!N;s/\n/ /' | awk '{print $1 " #" $2 }'

0

अपने उदाहरण जानकारी प्राप्त करने के तरीके के बारे में खोज करने वाले लोगों के लिए इसे जोड़ना। आप प्राप्त करने के लिए चुनिंदा कथन में VPC जोड़ सकते हैं।

शक्तियों में आप उपयोग कर सकते हैं:

(Get-EC2Instance -ProfileName Profile).Instances | select InstanceId,PrivateIPAddress,PublicIpAddress @{Name="Servername";Expression={$_.tags | where key -eq "Name" | select Value -expand Value}} | Format-Table.

AWS सीएलआई के साथ आप उपयोग कर सकते हैं:

aws ec2 describe-instances --region=us-east-1 --query 'Reservations[].Instances[].[InstanceId,Tags[?Key==Name].Value|[0],PrivateIpAddress,PublicIpAddress]' --output text --profile ProfileName

मैंने आपका उत्तर कमांड / कोड के रूप में कमांड को प्रारूपित करने के लिए संपादित किया है। क्या आप इस बात की दोहरी जाँच करेंगे कि आपके पहले कमांड के अंत में अवधि होनी चाहिए? यदि नहीं, तो कृपया इसे संपादित करें, धन्यवाद
JimLohse
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.