Como você faria para listar instâncias usando aws cli em determinadas VPC com o nome da tag, o endereço IP privado da instância e o id da instância?

17

O mais próximo que eu recebi é usando os seguintes comandos.

Este comando consegue listar todo o nome das instâncias.

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

Este comando consegue listar todas as tags privadas de endereço IP, identificação de instância e TODAS que eu não preciso. Eu só preciso do nome.

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

Não sei por que não consigo executar comandos desse jeito:

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

Este comando funciona, mas mostra todos os nomes das Chaves.

aws ec2 describe-instances | jq '.["Reservations"]|.[]|.Instances|.[]|.PrivateIpAddress + " " + .InstanceId + " " + .Tags'
    
por Imagineer 28.02.2014 / 07:13

6 respostas

21

Você precisa escapar das barras invertidas para formatar a resposta corretamente.

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

Então, esse é o comando que você quer:

$ 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

E você não precisa de .Value[] . Você pode usar apenas .Value , e isso dará o mesmo resultado.

Isso é incrível, btw. Eu mesmo vou implementar isso!

CORRECÇÃO: O acima não funcionará se o valor de .Value for "Nenhum". Isso funciona melhor:

$ 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
    
por 04.02.2015 / 01:06
5

Tente isso

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key=='Name'].Value|[0],State.Name,PrivateIpAddress,PublicIpAddress]' --output text | column -t
    
por 31.08.2016 / 14:36
3

As respostas acima são aceitáveis, mas o meu favorito é o seguinte:

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

na verdade, pode-se colocá-lo em uma lista de lista de funções 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 }

então simplesmente chame a partir do prompt como 'awsls'

    
por 07.03.2017 / 12:58
2

Algo parecido com isto?

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

Eu adicionei um filtro para o estado "em execução". Postando aqui caso seja útil para qualquer pessoa.

Meu caso de uso é um pouco diferente, estou gerando arquivos de host Ansible, portanto, quero apenas o nome do IP privado em todos os hosts em execução.

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 }'
    
por 13.03.2018 / 02:53
0

Adicionando isso para pessoas que normalmente encontrarão essa postagem quando pesquisarem como obter informações sobre sua instância. Você pode adicionar o VPC na instrução select para receber isso também.

No powershell você pode usar: (Get-EC2Instance -ProfileName Profile) .Instances | selecione InstanceId, PrivateIPAddress, PublicIpAddress @ {Name="Nome_do_servidor"; Expressão = {$ _. tags | onde chave -eq "Nome" | selecione Value -expand Value}} | Format-Table.

Com o Python AWS CLI, você pode usar: aws ec2description-instances --region = us-east-1 --query 'Reservas [] .Instâncias []. [InstanceId, Tags [? Key == Name]. Valor | [0], PrivateIpAddress, PublicIpAddress] '--output text --profile ProfileName

    
por 03.12.2018 / 23:22

Tags