Есть ли способ получить публичный DNS-адрес экземпляра?

18

У меня есть проект, в котором мне нужно обновлять файлы конфигурации каждый раз, когда экземпляр EC2 загружается с публичным DNS-адресом текущего экземпляра. Я буду использовать Perl или Sed для этого, так что это не совсем вопрос, но реальный вопрос: есть ли способ, которым я могу определить публичный адрес DNS экземпляра? Есть ли API EC2, к которому я могу получить доступ из экземпляра, чтобы определить его?

Нафтули Кей
источник

Ответы:

27

Есть. Внутри экземпляра вы можете запустить:

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

Чтобы получить общедоступное DNS-имя хоста, вы можете изменить его на:

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

Вы также можете получить частный IP для экземпляра:

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

Как примечание, вы можете дважды проверить его на не-AWS сайте в Интернете, например, http://ip4.me

#!/bin/bash

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

echo $pubip

Обычно это работает для проверки «публичного IP» любой системы с NAT или для поиска вашего публичного IP прокси и т. Д.

И вот хорошая ссылка, чтобы прочитать о типах информации, которую вы можете получить из API Amazon: http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatics-for-your- амазонки-EC2-экземпляры /

Тим Кеннеди
источник
1
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":) Вы, сэр, металл.
Нафтули Кей
рад помочь :)
Тим Кеннеди
2

Я определяю эту функцию внутри моего .bashrc для извлечения публичных ip и 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
источник
1

Вы можете установить и настроить AWS CLI ( aws configure) и использовать следующую команду:

aws ec2 describe-instances --instance-id i-0xyz --query 'Reservations[].Instances[].PublicDnsName' --output text
kenorb
источник