ECS Managed Instanceの検証をしていたらハマったので備忘録として。
Public Subnet で動く ECS Managed Instance 上のタスクコンテナに ECS Exec しようとしたらできない
何も考えずにパブリックサブネット上で上記を展開した後にExecコマンドを実行すると、下記のエラーが出ます。
An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed. TargetNotConnected: ecs:ecs-task_xxxxxxxxxxxxxxxx is not connected.
ECS Managed Instance におけるネットワークの考慮点
以下のブログに詳細がありますが、ECS Managed Instance では assignPublicIp=ENABLE でタスクにパブリックIPを付与することはできないようです。
Public Subnet にタスクインスタンスを配置している場合
対応方法としては下記のとおりです。
- VPC Endpoint を作成する
実際に試したところ接続できました。ただ、実運用を考えると Endpointの従量課金によるコスト は気になります。
Private Subnet にタスクインスタンスを配置している場合
- 上記の方法
- または NAT Gateway でインターネットへ通す
未検証ですが、この場合はネットワークレベルでルートが通っているため、おそらく接続できると思います。
まとめ
ECS Managed Instance を利用する際は、ネットワーク周りに注意が必要です。
本記事ではあまり触れていませんが、今回は awsvpc モードを前提としているため、これらの方法以外にも ECS ネットワークモードを bridge にするというやり方もありそうです。
実運用的には、すでに NAT Gateway や VPC Endpoint が整備されている環境であれば、ブログに記載の手法で進めるのがベターかと思います。

