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 を移行する前に気をつけるべきネットワーク周りの情報をメモとして残します。
どうしてネットワーク?
ECS Managed Instance のネットワークモードは awsvpc モード
/ host モード
がサポートされています。
しかし、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.
ECS Managed Instance を使う場合、assignPublicIp=DISABLED
とする必要があるため、既存の ECS Service を移行する場合に Task を配置する Subnet やネットワークモードに気をつける必要があります。assignPublicIp=ENABLE
で構築済みの ECS Service は、assignPublicIp の設定を DISABLED に変更する、もしくは ECS Service の再作成が必要です。
ネットワークモードについて
既存のネットワークモードについては以下の BlackBelt の P.27 に説明があります。
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.
このタスクには、独自の Elastic Network Interface (ENI) とプライマリプライベート IPv4 アドレスが割り当てられます。
つまり、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