Existe uma maneira de obter o endereço DNS público de uma instância?

18

Eu tenho um projeto em que preciso atualizar os arquivos de configuração sempre que uma instância do EC2 é inicializada com o endereço DNS público da instância atual. Vou usar o Perl ou o Sed para isso, então essa não é realmente a pergunta, mas a verdadeira questão é: existe uma maneira de determinar o endereço DNS público da instância? Existe uma API EC2 que eu possa acessar da instância para determiná-la?

Naftuli Kay
fonte

Respostas:

27

Há sim. De dentro da instância, você pode executar:

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

Para obter o nome do host DNS público, você pode alterá-lo para:

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

Você também pode obter o IP privado da instância:

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

Como observação lateral, você pode verificar novamente em um site que não seja da AWS na Internet, como http://ip4.me

#!/bin/bash

pubip=$( curl http://ip4.me 2>/dev/null | sed -e 's#<[^>]*>##g' | grep '^[0-9]' )

echo $pubip

Isso funcionará, geralmente, para verificar o "IP público" de qualquer sistema NAT, ou para encontrar o seu IP de proxy público, etc.

E aqui está um bom link para ler sobre os tipos de informações que você pode obter na API da Amazon: http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your- instâncias-amazon-ec2 /

Tim Kennedy
fonte
11
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":) Você, senhor, é metal.
Naftuli Kay
Fico feliz em ajudar :)
Tim Kennedy
2

Eu defino esta função dentro do meu .bashrc para recuperar o IP público e o DNS:

export PUBLIC_DNS=`curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null`
export PUBLIC_IP=`curl http://169.254.169.254/latest/meta-data/public-ipv4 2>/dev/null`

function get-pub() {
  if [ $# -ne 1 ]; then
    echo "Invalid number of arguments"
    return 1
  else
    case $1 in
      dns)
        echo $PUBLIC_DNS
        ;;
      ip)
        echo $PUBLIC_IP
        ;;
      *)
        echo $"Usage: get-pub {dns|ip}"
        return 2
    esac;
  fi
  return 0
}
y0n1
fonte
1

Você pode instalar e configurar o AWS CLI ( aws configure) e usar o seguinte comando:

aws ec2 describe-instances --instance-id i-0xyz --query 'Reservations[].Instances[].PublicDnsName' --output text
kenorb
fonte