こんにちは、@Manabu です。
2024年2月以降、EC2にアタッチするElasticIPの料金形態が変わったことで、アタッチしていても料金が発生することになりました。
そのため、テストサーバーとして使用する場合にパブリックIPを使用する場面が増えてきました。ただ、パブリックIPは動的で起動するたびに違うIPがアタッチされてしまいます。
今回は、EC2のパブリックIPをソースの中で使用したいときに役にたつ、取得方法について調べてみました。
EC2のメターデータ
AWS EC2インスタンスには「メタデータサービス」という仕組みが用意されており、インスタンスの情報(パブリックIP、プライベートIP、ホスト名など)をHTTPリクエストで簡単に取得することができます。
この情報は、インスタンス内からのみアクセス可能であり、安全に利用できます。
例えば、パブリックIPアドレスは以下のURLで取得できます。
http://169.254.169.254/latest/meta-data/public-ipv4
こちらを使って、PHPのソースの中でパブリックIPを取得したいと思います。
PHPでパブリックIPを取得する方法
上記のURLを使用すると、簡単にパブリックIPを取得することができます。
実装例は以下です。
$publicIp = file_get_contents('http://169.254.169.254/latest/meta-data/public-ipv4');
このようにするだけで、変数の中にEC2のパブリックIPを代入することができます。
注意点
今回、私の中ではテスト用として使用するために調査しているため、本番環境でもし使用する場合は以下に気を付けてください。
file_get_contentsが使用できるか
一部のサーバー設定では、allow_url_fopenが無効になっている場合があります。
その場合、curlなど他の方法を使用してください。
動的IPの管理
EC2インスタンスのパブリックIPは再起動や停止後に変更されるため、動的に取得する仕組みをアプリケーションに組み込むことが重要です。
セキュリティ
このメタデータサービスは、インスタンス内からのみアクセス可能なので安全ですが、公開する情報には注意してください。
まとめ
AWS EC2のメタデータサービスを利用することで、動的に変わるパブリックIPを簡単に取得できます。この情報をPHPで活用することで、柔軟なアプリケーション構築が可能になります。
特にテスト環境や固定IPを使わない場合、動的にIPを取得する仕組みは非常に役立ちます。