PHPでEC2のパブリックIPを取得してみた!

AWS
この記事は約2分で読めます。

こんにちは、@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を取得する仕組みは非常に役立ちます。