🐷

Fargateのコンテナから自身のPublic IPを得る

2020/09/18に公開

参考
amazon web services - How do I retrieve the public IP for a fargate task using the CLI? - Stack Overflow

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が返ってくる。
ここで ClusterTaskARN を得る。

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