条件
必要な VPC Endpoint
- 以下エンドポイントを作成(interface)
ssmmessages ec2messages ssm
Security Group
- ECS Task にアタッチされている Security Group から VPC Endpoint への接続ができるようにアウトバウンドを設定する
- 以下の方法などで VPC Endpoint の Security Group で 443 ポートに TCP プロトコルでアクセスできるようにする
- ECS Task にアタッチされている Security Group からの接続を許可する
- ECS Task が配置されている Subnet の範囲からの接続を許可する
Task Definition
- EnableExecuteCommand を有効化する
- EnableExecuteCommand を true にする
- readonlyRootFileSystem を true にしない
- null か false
- github actions で以下使ってる場合は false 指定する必要あり
aws-actions/amazon-ecs-deploy-task-definition@v2
IAM
- ECS の TaskRole に AmazonSSmManagedInstanceCore をアタッチする
AWS CLI
- session-manager-plugin をインストールする
Platform Version
- 1.4.0 以上である必要があり(基本勝手に更新されそう)
確認
- AWS Management Console 上で ECS のアクセスしたいタスクのコンテナを選択し、接続ボタンが押せるようになっていたら接続可能
蛇足
- readonlyRootFileSystem で普通にハマってずっと SecurityGroup と Subnet 眺めてた
- セキュリティー的には推奨されないし ECS で使うのはベストプラクティスに反するので開発環境でのみ有効化したい
- aws-actions/amazon-ecs-deploy-task-definition ではバージョンによって null の扱いがちがうので注意
- v2 だと入力されてない扱いになりデフォルトの値になる