有没有办法获取实例的公共DNS地址?


18

我有一个项目,每次使用当前实例的公共DNS地址启动EC2实例时,我都需要更新配置文件。我将为此使用Perl或Sed,所以这不是真正的问题,但真正的问题是:有没有办法确定实例的公共DNS地址?我可以从实例中访问以确定它的EC2 API吗?

Answers:


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

通常,这将可以检查任何经过NAT的系统的“公共IP”,或查找您的公共代理IP等。

以下是一个很好的链接,以阅读您可以从Amazon的API获取的信息类型:http : //www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your-亚马逊EC2实例/


1
PUBLIC_HOSTNAME="$(curl http://169.254.169.254/latest/meta-data/public-hostname 2>/dev/null)":)先生,您是金属。
Naftuli Kay 2011年

很高兴为您提供帮助:)
蒂姆·肯尼迪

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
}

1

您可以安装和配置AWS CLIaws configure)并使用以下命令:

aws ec2 describe-instances --instance-id i-0xyz --query 'Reservations[].Instances[].PublicDnsName' --output text
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.