はじめに
ECS Exec を使うと、コンテナのシェルに接続できるので(docker exec ができる。SSH みたいな感じ)、AWS ECS を使っているときのデバッグに便利。
今回は、 AWS CDK の ApplicationLoadBalancedFargateService を使って ECS を構築していたのですが、その場合に ECS Exec を有効にする方法をまとめます。
ECS Exec が有効になっているかどうか確認する方法
AWS CLI の aws ecs describe-tasks
コマンドを使うと、ECS Exec が有効になっているかどうかわかります。
# ECS task の状態が json 形式で出力される # enableExecuteCommand の値が true の場合、 ECS Exec が有効になっている # 実行例: aws ecs describe-tasks --cluster=your-cluster-name --task=394cc1d3d2d74f8594b7570ad8fc7ffb # 結果がでかいので grep すると良い aws ecs describe-tasks --cluster=your-cluster-name --task=394cc1d3d2d74f8594b7570ad8fc7ffb | grep enableExecuteCommand
ECS Exec の有効化
AWS CDK の修正
ECS Exec はデフォルトで無効化されています。
ApplicationLoadBalancedFargateService のプロパティに、enableExecuteCommand
というものがあるので、これを true にします。
const ecsService = new ApplicationLoadBalancedFargateService(this, "sample-ecs-service", { ... enableExecuteCommand: true, });
タスクを再起動
enableExecuteCommand を true にすると、次に実行されたタスクから AWS Exec が有効になります。そこで、タスクを再起動させて上げる必要があります。
タスクを止めて問題なければ、 AWS コンソール上からタスクを停止させて、タスクが再起動してくるのを待ちます。止めたくない場合は、デプロイを実行すれば大丈夫です。
タスクを再起動後、改めて describe-tasks
コマンドを実行し、 enableExecuteCommand が true になっていることを確認します。
AWS Exec 実行例
aws ecs execute-command --interactive --cluster=your-cluster-name --task=7482ef940c944042aea6fb7ae0d842f7 --container=接続したいコンテナ --command /bin/bash