本記事は、AWS ECS on Fargateへ ECS execを利用してシェルログインを行う手順を記載する。
ECS execについて
ECS execは、ECSクラスター上で起動している ECSインスタンス / Fargate に対してコンテナ内でコマンドを実行したり、シェルを取得する事が出来る機能。
前提条件
- ECS Exec は対象が Linux コンテナでのみサポートされる。
- AWS Management Console からの実行は不可能でAWS CLI から行う必要がある。
また、AWS CLI バージョン 1.19.28 以上 または バージョン 2.1.31 以上でないと、コマンドが実行できないため注意が必要。 - Systems Manager の Session Managerを利用して、実行中のコンテナとの接続を確立するため、インターフェイス Amazon VPC エンドポイントを作成する必要がある。
- EC2にて利用する場合、2021年 1月 20日以降にリリースされた Amazon ECS 最適化済みの AMI 、エージェントバージョン 1.50.2 以上で使用する必要がある。
Fargateにて利用する場合は、プラットフォームバージョン 1.4.0 以上を使用する必要がある。
手順
IAMロール
ECS Exec を使用するためには、ECSタスクロールに SSMエージェントとSSMサービス間の通信に必要な権限をコンテナに付与する必要がある。
ECS Exec で使用するコンテナのタスクロールに、以下の IAM ポリシーを追加する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
ECS on Fargate
ECS クラスター / サービス / タスク定義は既に作成している前提
既に使用しているタスクに対して ECS Execを有効する事は出来ない。
そのため、サービスに設定されている "enableExecuteCommand" という ECS Execを有効にする設定の変更を行う必要がある。
enableExecuteCommandはデフォルトで falseとなっている。
aws ecs describe-services --cluster <cluster-name> --service <service-name>
サービスの更新を行い、 enableExecuteCommandを tureに変更する。
aws ecs update-service --cluster <cluster-name> --service <service-name> --enable-execute-command
enableExecuteCommandが trueになっている状態から起動をしないとタスクは有効にならない。
aws ecs describe-tasks --cluster <cluster-name> --tasks <task-ID>
サービスが更新された状態でタスクを起動して、enableExecuteCommandが有効になっているか確認する。
この状態で ECS Execが使用可能となるため、ecs execute-commandを実行してシェルログインを行う。
ecs execute-commandでは --interactive / --commandオプションが必須であり、 --commandでは、コンテナで実行するコマンドを指定する。
aws ecs execute-command --cluster <cluster-name> --task <task-ID> --container <container-name> --command "<command>" --interactive
コンテナに対してシェルログインを行う場合は、 --command "/bin/bash" を指定して、実行すると、セッションがスタートし、ログインが可能となる。