Existe-t-il un moyen d'obtenir l'adresse DNS publique d'une instance?

18

J'ai un projet dans lequel j'ai besoin de mettre à jour les fichiers de configuration chaque fois qu'une instance EC2 est démarrée avec l'adresse DNS publique de l'instance actuelle. J'utiliserai Perl ou Sed pour cela, donc ce n'est pas vraiment la question, mais la vraie question est: existe-t-il un moyen de déterminer l'adresse DNS publique de l'instance? Existe-t-il une API EC2 à laquelle je peux accéder à partir de l'instance pour la déterminer?

Naftuli Kay
la source

Réponses:

27

Il y a. Depuis l'intérieur de l'instance, vous pouvez exécuter:

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

Pour obtenir le nom d'hôte DNS public, vous pouvez le changer en:

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

Vous pouvez également obtenir l'IP privée de l'instance:

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

En guise de remarque, vous pouvez le vérifier par rapport à un site non AWS sur Internet, comme http://ip4.me

#!/bin/bash

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

echo $pubip

Cela fonctionnera, généralement, pour vérifier l '"IP publique" de tout système NAT, ou pour trouver votre IP proxy publique, etc.

Et voici un bon lien pour lire sur les types d'informations que vous pouvez obtenir de l'API d'Amazon: http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your- amazon-ec2-instances /

Tim Kennedy
la source
1
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":) Vous, monsieur, êtes du métal.
Naftuli Kay
heureux d'aider :)
Tim Kennedy
2

Je définis cette fonction dans mon .bashrc pour récupérer l'IP et le DNS publics:

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
la source
1

Vous pouvez installer et configurer AWS CLI ( aws configure) et utiliser la commande suivante:

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