it-swarm.com.de

Wie würden Sie Instanzen mit aws cli in bestimmten VPCs mit dem Tag-Namen, der privaten IP-Adresse der Instanz und der Instanz-ID auflisten?

Am nächsten komme ich mit den folgenden Befehlen.

Dieser Befehl verwaltet alle Namen von Instanzen.

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

Mit diesem Befehl können alle privaten IP-Adressen, Instanz-IDs und ALLE Tags aufgelistet werden, die ich nicht benötige. Ich brauche nur den Namen.

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

Ich bin mir nicht sicher, warum ich einen Befehl nicht so ausführen kann:

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

Dieser Befehl funktioniert, zeigt jedoch alle Namen der Tags-Schlüssel an.

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

Sie müssen die Backslashes umgehen, um die Antwort korrekt zu formatieren.

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

Das ist also der eigentliche Befehl, den Sie wollen:

$ 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

Und du brauchst nicht .Value[]. Sie können einfach .Value, und das ergibt die gleiche Ausgabe.

Das ist übrigens großartig. Ich werde das selbst umsetzen!

KORREKTUR : Das Obige funktioniert nicht, wenn der Wert von .Value ist "Keine". Das funktioniert besser:

$ 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
25
DrStrangepork

Versuche dies

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

Die obigen Antworten sind in Ordnung, aber mein Favorit ist;

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

tatsächlich kann man es in eine BASH-Funktionslistenliste einfügen.

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 }

rufen Sie dann einfach von der Eingabeaufforderung als "awsls" an.

7

Etwas wie das?

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

Ich habe einen Filter für den Status "running" hinzugefügt. Poste es hier, falls es für jemanden hilfreich ist.

Mein Anwendungsfall ist etwas anders. Ich generiere Ansible Host-Dateien, daher möchte ich nur den privaten IP-Namen auf allen laufenden Hosts.

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 }'
1
jorfus

Fügen Sie dies für Leute hinzu, die diesen Beitrag finden, wenn Sie suchen, wie Sie Ihre Instanzinformationen erhalten. Sie können der select-Anweisung VPC hinzufügen, um diese ebenfalls zu erhalten.

In Powershell können Sie verwenden:

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

Mit der AWS CLI können Sie Folgendes verwenden:

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