Amazon EC2 で、サーバ自身のグローバル IP アドレスを調べる方法

Amazon EC2 は何もしないと DHCP でグローバル IP アドレスが割り当てられる。これはサーバを立ち上げるときには大変困る。EC2 でサーバを立ち上げた後、アプリから割り振られた IP アドレスを知るにはどうしたらいいのだろう?ひとつには、ec2-describe-instances で現在起動しているインスタンスの一覧を出して調べていく…という方法があるが、あまりスマートではない。というわけで、次のようにするとよいと思う。

curl https://169.254.169.254/2008-02-01/meta-data/public-ipv4
この例のように Amazon EC2 では、https://169.254.169.254/2008-02-01/meta-data/パラメータ という URL で、サーバ内部から curl を使って調べることができるようだ。
ということは、ダイナミックDNS を利用している場合など、以下のようなスクリプトで対応できそうだ。
#!/bin/sh
USERNAME=your_username
PASSWORD=your_password
HOSTNAME=your_server.dyndns.org など

IP=`curl https://169.254.169.254/2008-02-01/meta-data/public-ipv4`

curl "https://$USERNAME:$PASSWORD@members.dyndns.org/nic/update?hostname=$HOSTNAME&myip=$IP&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"

このほかにもパラメータの部分に public-hostname などと設定すればホスト名が取れるし、https://169.254.169.254/2008-02-01/meta-data/パラメータ でアクセスできる値は、EC2 のドキュメントに詳しく書いてある。

トラックバック URL: https://perltips.twinkle.cc/trackback/326