¿Hay alguna forma de obtener la dirección DNS pública de una instancia?

18

Tengo un proyecto en el que necesito actualizar los archivos de configuración cada vez que se inicia una instancia EC2 con la dirección DNS pública de la instancia actual. Usaré Perl o Sed para esto, así que esa no es realmente la pregunta, pero la pregunta real es: ¿hay alguna forma de determinar la dirección DNS pública de la instancia? ¿Hay una API EC2 a la que pueda acceder desde la instancia para determinarla?

Naftuli Kay
fuente

Respuestas:

27

Ahi esta. Desde dentro de la instancia, puede ejecutar:

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

Para obtener el nombre de host DNS público, puede cambiarlo a:

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

También puede obtener la IP privada para la instancia:

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

Como nota al margen, puede verificarlo en un sitio que no sea de AWS en Internet, como http://ip4.me

#!/bin/bash

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

echo $pubip

Eso funcionará, en general, para verificar la "IP pública" de cualquier sistema NAT, o para encontrar su IP proxy pública, etc.

Y aquí hay un buen enlace para leer sobre los tipos de información que puede obtener de la API de Amazon: http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your- amazon-ec2-instancia /

Tim Kennedy
fuente
1
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":) Usted, señor, es metal.
Naftuli Kay
encantado de ayudar :)
Tim Kennedy
2

Defino esta función dentro de mi .bashrc para recuperar la ip pública y 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
fuente
1

Puede instalar y configurar AWS CLI ( aws configure) y usar el siguiente comando:

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