🙆

Amazon ECS Managed Instance へ既存 ECS Service を移行する時に気をつけるネットワーク設定

に公開

言いたいこと

ECS Managed Instance に移行する前に ECS Service の assignPublicIp 設定を確認しよう。

概要

Amazon ECS でコンテナを動かすコンテナ基盤の選択肢として Fargate / EC2 / ECS Managed Instance (New!) があります。新しく出た ECS Managed Instance へ既存の ECS Service を移行する前に気をつけるべきネットワーク周りの情報をメモとして残します。

https://aws.amazon.com/jp/ecs/managed-instances/

どうしてネットワーク?

ECS Managed Instance のネットワークモードは awsvpc モード / host モード がサポートされています。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instance-networking.html

しかし、ECS Managed Instance の制限として、RunTask や ECS Service を動かす際、assignPublicIp=ENABLE として Public IP を付与することはできません。

Assigning a public IP address to the task ENI using assignPublicIp when running a standalone task (RunTask) or creating or updating a service (CreateService/UpdateService) is not supported.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-awsvpc-mode.html#managed-instances-awsvpc-considerations

ECS Managed Instance を使う場合、assignPublicIp=DISABLED とする必要があるため、既存の ECS Service を移行する場合に Task を配置する Subnet やネットワークモードに気をつける必要があります。assignPublicIp=ENABLE で構築済みの ECS Service は、assignPublicIp の設定を DISABLED に変更する、もしくは ECS Service の再作成が必要です。

ネットワークモードについて

既存のネットワークモードについては以下の BlackBelt の P.27 に説明があります。
https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2024_Amazon_ECS_Introduction_0831_v1.pdf

Fargate で利用できるのは awsvpc モードのみで、ECS Task それぞれに ENI をアタッチすることができます。また、ECS Service の定義で assignPublicIp=ENABLE とすることで Public IP を付与することができます。

一方、EC2 で利用できる bridge モードhost モード は EC2 の ENI を利用した通信になります。ECS Task それぞれに ENI は生えません。
EC2 でも awsvpc モード を利用し ECS Task ごとに ENI を生やすことができますが、assignPublicIp=ENABLEに設定することはできません。

Invalid request provided: Assign public IP is not supported for this launch type.

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task-networking.html

このタスクには、独自の Elastic Network Interface (ENI) とプライマリプライベート IPv4 アドレスが割り当てられます。

https://pages.awscloud.com/rs/112-TZM-766/images/20200422_BlackBelt_Amazon_ECS_Share.pdf

https://dev.classmethod.jp/articles/publicsubnet_ecs_ec2_awsvpc_internet_connection/

つまり、assignPublicIp=ENABLE が利用できるのは Fargate の awsvpc モードのみとなり、この設定で動いている ECS Service を ECS Managed Instance に移行する際に注意が必要です。

まとめ

既存の ECS Service を ECS Managed Instance に移行する際は、ECS Service の設定で assignPublicIp=ENABLE になっていないか?を確認し、assignPublicIp=DISABLEDに変更する、もしくは ECS Service を新規にassignPublicIp=DISABLEDで作り直すことが必要になります。
※実際に assignPublicIp=ENABLE のままで ECS Managed Instance に移行すると、特にエラーは表示せず EC2 インスタンスが起動しないという状態になります。(20251002時点)

assignPublicIp を確認するコマンドは以下です。

aws ecs describe-services \
  --cluster <cluster-name> \
  --services <service-name> \
  --query 'services[0].networkConfiguration.awsvpcConfiguration.assignPublicIp'

Discussion