インスタンスメタデータからAmazon EC2 インスタンスのパブリック IPv4 アドレスを取得する
はじめに
Amazon EC2 (Elastic Compute Cloud) は、クラウド上でスケーラブルなコンピューティング容量を提供するサービスです。EC2インスタンスを使用する際、アプリケーションがインスタンスのパブリックIPv4アドレスを知る必要がある場合があります。例えば、外部サービスと通信するためや、アクセスログに記録するためです。このブログ記事では、Amazon EC2インスタンスのパブリックIPv4アドレスをインスタンスメタデータを使用して取得する方法について説明します。
インスタンスメタデータとは?
インスタンスメタデータは、Amazon EC2インスタンスに関する情報を提供する特別なエンドポイントです。インスタンスメタデータを使用することで、インスタンスのID、AMI ID、インスタンスタイプ、セキュリティグループなど、多くの情報にアクセスできます。このエンドポイントは、インスタンス内からのみアクセス可能で、HTTPリクエストを通じて情報を取得できます。
IMDSv1とIMDSv2について
AWSは、インスタンスメタデータサービス(IMDS)に二つのバージョンを提供しています。IMDSv1とIMDSv2です。
- IMDSv1 初期のバージョンで、シンプルなHTTP GETリクエストでメタデータにアクセスできます。
- IMDSv2 セキュリティ強化のために導入された新しいバージョンで、トークンベースの認証が必要です。これにより、メタデータのアクセスがより安全になります。
パブリックIPv4アドレスの取得方法
パブリックIPv4アドレスを取得するためには、次のURLをクエリします。
http://169.254.169.254/latest/meta-data/public-ipv4
このURLにアクセスすると、インスタンスのパブリックIPv4アドレスが返されます。以下に具体的な手順とコード例を示します。
EC2インスタンスにログイン
まず、対象のEC2インスタンスにログインします。
メタデータエンドポイントにリクエストを送信
次に、curl
コマンドを使用してメタデータエンドポイントにリクエストを送信し、パブリックIPv4アドレスを取得します。
- IMDSv1
curl http://169.254.169.254/latest/meta-data/public-ipv4
- IMDSv2
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4
このコマンドを実行すると、インスタンスのパブリックIPv4アドレスが返されます。
スクリプトによる自動取得
頻繁にパブリックIPv4アドレスを取得する必要がある場合、スクリプトを使用して自動化することも可能です。以下は、Pythonを使用した簡単なスクリプトの例です。
import requests
def get_public_ipv4():
token_url = "http://169.254.169.254/latest/api/token"
metadata_url = "http://169.254.169.254/latest/meta-data/public-ipv4"
# トークンの取得
token_response = requests.put(token_url, headers={"X-aws-ec2-metadata-token-ttl-seconds": "21600"})
token = token_response.text
# パブリックIPv4アドレスの取得
response = requests.get(metadata_url, headers={"X-aws-ec2-metadata-token": token})
if response.status_code == 200:
return response.text
else:
raise Exception("Failed to retrieve public IPv4 address")
if __name__ == "__main__":
try:
public_ip = get_public_ipv4()
print(f"Public IPv4 Address: {public_ip}")
except Exception as e:
print(e)
このスクリプトを実行すると、インスタンスのパブリックIPv4アドレスが取得され、表示されます。
まとめ
Amazon EC2インスタンスのパブリックIPv4アドレスを取得するには、インスタンスメタデータをクエリするのが最も簡単で効率的な方法です。http://169.254.169.254/latest/meta-data/public-ipv4
にアクセスすることで、パブリックIPv4アドレスを容易に取得できます。これにより、アプリケーションは必要なネットワーク情報を動的に取得でき、外部サービスとの通信やログ管理が容易になります。
Discussion