Etiket Adı, örnek özel IP adresi ve örnek kimliğiyle belirli VPC'de aws cli kullanarak örnekleri listelemeye ne dersiniz?


19

En yakın ben aşağıdaki komutları kullanmaktır.

Bu komut tüm örnek adlarını listeler.

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

Bu komut, ihtiyaç duymadığım tüm özel ip adreslerini, örnek kimliğini ve TÜM etiketleri listeleyebiliyor. Sadece isme ihtiyacım var.

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

Neden bu şekilde komut yürütemiyorum emin değilim:

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

Bu komut çalışır, ancak tüm Tag Key adlarını gösterir.

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

1
Bu komutları ne yaptıklarını anlamaya çalışmadan bir yerden mi kopyalıyorsunuz?
Michael Hampton

Gerçekten değil, nasıl jq kullanmak ve nasıl temel json çıktı almak için anlamaya çalıştım. Ancak, elde etmeye çalıştığım şey için örnek bulamadım. NameAnahtar Adı Değer çıktısı için bir filtre olarak "Tags [? Key == ] .Value []" kullanılması yalnızca aws-cli v1.3.0'dan sonra mümkündür. Ve istediğim çıktıyı almak için --filter ve jq kombinasyonunu kullanıyorum. En yakın komut aws ec2 description-instances --filters Name = vpc-id, Values ​​= vpc-e2f17e8b | jq '.Reservations []. Örnekler [] | {PrivateIpAddress, InstanceId, Tags} 'Sadece jq kullanarak Tag Key = Name'e nasıl başvuracağımı bilmem gerekiyor.
Imagineer

Yanıtlar:


24

Cevabı doğru biçimlendirmek için ters eğik çizgilerden kaçmanız gerekir.

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

Yani bu istediğiniz gerçek komut:

$ 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

Ve ihtiyacın yok .Value[]. Sadece kullanabilirsiniz .Valueve bu aynı çıktıyı verecektir.

Bu harika, btw. Bunu kendim uygulayacağım!

DÜZELTME: Yukarıdaki değer .Value"Yok" ise işe yaramaz . Bu daha iyi çalışır:

$ 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 komutunu açıklayabilir misin? Ben sed dolaylı kabuk genişleme anlamıyorum çünkü biri tarafından örnek kimlikleri / adları alıyorum.
jorfus

3
Bir örnek Adlandırılmamışsa (Tag: key = Ad ayarlı değilse), sonraki örnek aynı satıra yazdırılır. İlk sed komutu bu sorunu azaltmak için "None \ n" dizesini yazdırır. İkinci sed komutu satır beslemesini örnek-id'den ayırır, böylece Tag: key = Name dizesi aynı satıra yazdırılır.
DrStrangepork

8

Bunu dene

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

3
Kodunuz için açıklama eklemeniz gerekir. Bu kodun sorunu nasıl ve neden çözdüğünü açıklamak OP ve diğer okuyucuların bu ve benzeri sorunları kendileri çözmelerine yardımcı olduğundan daha kullanışlıdır.
Anthony G - Monica için adalet

Bu işe yarıyor, ama gerçekten neden çalışıyor? |bir çeşit filtre nedir?
aairey

7

Yukarıdaki cevaplar iyi, ama benim en sevdiğim;

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

aslında, bir BASH fonksiyon listesi listesine yerleştirilebilir;

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 }

sonra komut isteminden 'awsls' olarak çağırmanız


Bir dosyaya birden çok işlevi nasıl eklersiniz ve istediğiniz işlevi nasıl çağırırsınız?
Stryker

2

Böyle bir şey mi?

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

1

Örneğin "çalışan" durumu için bir filtre ekledim. Herkes için yararlı olması durumunda buraya gönderiyoruz.

Kullanım durumum biraz farklı, Ansible ana bilgisayar dosyaları oluşturuyorum, bu yüzden sadece çalışan tüm ana bilgisayarlarda özel IP # adı istiyorum.

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

Örnek bilgilerinizi nasıl alacağınızı ararken bu yayını bulan kişiler için ekleyin. Bunu almak için select deyimine VPC ekleyebilirsiniz.

Powershell'de şunları kullanabilirsiniz:

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

AWS CLI ile şunları kullanabilirsiniz:

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

Komutlarınızı komut / kod olarak biçimlendirmek için cevabınızı düzenledim. İlk komutunuzun sonundaki sürenin orada olup olmadığını iki kez kontrol eder misiniz? Değilse, lütfen düzenleyin, teşekkürler
JimLohse
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.