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

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

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

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-automatically-for-your- амазонка-EC2-экземпляры /

Я определяю эту функцию внутри моего .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 }