2014-07-24 16 views
25

Desidero elencare gli indirizzi IP pubblici delle mie istanze EC2 utilizzando Bash, separati da un delimitatore (spazio o una nuova riga).Elenco degli indirizzi IP pubblici delle istanze EC2

Ho provato a reindirizzare l'output a jq con aws ec2 describe-instances | jq, ma non riesco a isolare solo gli indirizzi IP.

Questo può essere fatto da aws da solo, specificando argomenti a jq, o qualcos'altro interamente?

+1

Hai provato: 'arricciare http --silent: // ipecho.net/plain' – anubhava

+1

o' ricciolo icanhazip.com', o 'ricciolo ident.me ' –

+0

Questo mi mostra il mio indirizzo IP .. non un elenco di quelle che le mie istanze hanno –

risposta

51

Direttamente dal aws cli:

aws ec2 describe-instances \ 
    --query "Reservations[*].Instances[*].PublicIpAddress" \ 
    --output=text 
+0

Impressionante. Ma questo genera tre colonne: una con IP su ogni riga e due con IP solo su alcune righe. Ottengo un bel elenco separato da tabulazioni quando utilizzo 'Reservations [*]. Istanze [*]. PublicIpAddress []' invece per l'argomento query. –

+4

Avvolgi il tuo 'PublicIpAddress' in parentesi quadre per assicurare 1 per riga, come suggerito qui: https://github.com/aws/aws-cli/issues/914#issuecomment-56210312. Questo funziona per me '--query 'Reservations []. Istanze []. [PublicIpAddress]' – jaygooby

+0

C'è un modo per filtrare usando il gruppo di sicurezza? Ho provato: "aws ec2 describe-instance --filters Nome = vpc-id, valori = {vpcid} Nome = IstanzaId, Valori = {securityGroupID} --output = testo". Ma non ottengo nulla –

6

Il comando di seguito sarebbe elencare gli indirizzi IP di tutti i tuoi istanze EC2 in esecuzione

aws ec2 describe-instances | grep PublicIpAddress | grep -o -P "\d+\.\d+\.\d+\.\d+" | grep -v '^10\.' 

speranza che risponde alla tua domanda.

+0

A partire dal 19 ottobre 2015, questo comando non funziona . – pyrrhic

+1

Ho appena provato lo stesso comando oggi 10/23/15 e funziona perfettamente senza problemi. Qual è l'errore che vedi? –

+1

Su Mac, ricevo un errore di utilizzo di grep. – pyrrhic

2

È possibile utilizzare instance metadata in modo da poter eseguire il seguente comando dalla istanza EC2:

curl http://169.254.169.254/latest/meta-data/public-ipv4 

e ti darà il publi c IP dell'istanza. Se si desidera che l'IP privato, vi imbatterete

curl http://169.254.169.254/latest/meta-data/local-ipv4 
+1

Questo è fantastico! Tuttavia, suggerisco di usare 'wget -qO -' invece di' curl' (anche se uso il ricciolo del 99,9% o il tempo nei miei script.) Il motivo è che 'arricciato 'produrrà il contenuto della pagina 404 se il server non funziona 'ho un IP pubblico e 'wget' no. Quindi in bash è semplice fare' public_ip = "$ (wget -qO - http://169.254.169.254/latest/meta-data/public-ipv4)" 'e ottieni risultati attesi Puoi testare con' if [[-n $ public_ip]], quindi echo "IP pubblico: $ public_ip"; fi' –

Problemi correlati