🐷
Fargateのコンテナから自身のPublic IPを得る
1. ECS_CONTAINER_METADATA_URIからメタデータ取得
タスクメタデータエンドポイントバージョン3 - Amazon Elastic Container Service
Private IPを得るときは ${ECS_CONTAINER_METADATA_URI}
をGETすれば↓のように得られる
{
"Networks": [
{
"NetworkMode": "awsvpc",
"IPv4Addresses": [
"10.0.2.106"
]
}
]
}
Public IPを得るには諸々の処理が必要。
${ECS_CONTAINER_METADATA_URI}/task
をGETすると自身のTaskについてJSONが返ってくる。
ここで Cluster
と TaskARN
を得る。
2. AWS SDKでECS.DescribeTasksを叩く
DescribeTasks - Amazon Elastic Container Service
tasks[0].attachments[0].details
から name
= networkInterfaceIdの value
から ENI IDを得る。
3. AWS SDKでEC2.DescribeNetworkInterfacesを叩く
DescribeNetworkInterfaces - Amazon Elastic Compute Cloud
networkInterfaces[0].association.publicIp
からPublic IPを得る。
Discussion