インスタンスのパブリックDNSアドレスを取得する方法はありますか?

インスタンスのパブリックDNSアドレスを取得する方法はありますか?

現在のインスタンスのパブリックDNSアドレスを使用してEC2インスタンスを起動するたびに設定ファイルを更新する必要があるプロジェクトがあります。私はこれにPerlやSedを使用しますので、実際には質問ではありませんが、実際の質問は次のとおりです。インスタンスのパブリックDNSアドレスを確認する方法はありますか?これを確認するためにインスタンスからアクセスできるEC2 APIはありますか?

答え1

持っています。インスタンス内で以下を実行できます。

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-amazon-ec2-instances/

答え2

パブリックIPとDNSを取得するために.bashrcでこの関数を定義します。

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
}

答え3

インストールして設定できます。AWS CLI( aws configure) 次のコマンドを使用します。

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

答え4

これにより、ラベルごとにDNS名が表示されます。

aws ec2 describe-instances --region us-east-2 --max-items 1 --filters "Name=tag:Name,Values=MyNameTag" --query 'Reservations[].Instances[].PublicDnsName' --output text

関連情報