Gibt es eine Möglichkeit, die öffentliche DNS-Adresse einer Instanz abzurufen?

18

Ich habe ein Projekt, in dem ich die Konfigurationsdateien jedes Mal aktualisieren muss, wenn eine EC2-Instanz mit der öffentlichen DNS-Adresse der aktuellen Instanz gestartet wird. Ich verwende hierfür Perl oder Sed. Das ist also nicht die eigentliche Frage, aber die eigentliche Frage lautet: Gibt es eine Möglichkeit, die öffentliche DNS-Adresse der Instanz zu ermitteln? Gibt es eine EC2-API, auf die ich von der Instanz aus zugreifen kann, um sie zu ermitteln?

Naftuli Kay
quelle

Antworten:

27

Es gibt. Innerhalb der Instanz können Sie Folgendes ausführen:

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

Um den öffentlichen DNS-Hostnamen abzurufen, können Sie diesen folgendermaßen ändern:

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

Sie können auch die private IP für die Instanz erhalten:

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

Als Randnotiz können Sie es gegen eine Nicht-AWS-Site im Internet wie http://ip4.me überprüfen

#!/bin/bash

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

echo $pubip

Das funktioniert im Allgemeinen, um die "öffentliche IP" eines NAT-Systems zu überprüfen oder Ihre öffentliche Proxy-IP zu finden usw.

Und hier ist ein guter Link, um mehr über die Arten von Informationen zu erfahren, die Sie über die Amazon-API erhalten können: http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your- amazon-ec2-instanzen /

Tim Kennedy
quelle
1
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":) Sie, mein Herr, sind Metall.
Naftuli Kay
froh zu helfen :)
Tim Kennedy
2

Ich definiere diese Funktion in meinem .bashrc, um die öffentliche IP und DNS abzurufen:

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
quelle
1

Sie können AWS CLI ( aws configure) installieren und konfigurieren und den folgenden Befehl verwenden:

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