TL;DR
- AWSのECSコンソール上にボタンが増えてECSタスクに入れるようになった
- ボタンを押すとCloudShellが立ち上がり、SSM経由でタスクに入れる
- タスクロールにSSMの権限を追加する必要がある
About
AWSコンソール上からECS execが可能になりました。
What's New at AWS - Cloud Innovation & News
How to
タスク定義の作成
AWSコンソール上からのECS execはSSM経由で行うため、事前にタスクロールにSSMの権限を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
AmazonLinuxイメージで単純に起動しつづける(tail -f /dev/null)タスク定義を作成します。
$ cat <<EOF > task.json { "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "executionRoleArn": "<YOUR TASK EXECUTION ROLE ARN>", "taskRoleArn": "<YOUR TASK ROLE ARN>", "memory": ".5 gb", "cpu": ".25 vcpu", "containerDefinitions": [ { "name": "amazon-linux", "image": "amazonlinux:latest", "essential": true, "command": ["tail", "-f", "/dev/null"], "linuxParameters": { "initProcessEnabled": true } } ], "family": "tmp-ecs-exec-al" } EOF
タスク定義を作成
$ aws ecs register-task-definition --cli-input-json file://task.json
サービスの作成
AWSコンソール上で作成します。
「ECS Execをオンにする」という項目にチェックが必要になります。
他に、Private SubnetであればSSMに疎通できるようNAT Gatewayやエンドポイントを用意してください。
今回は検証のためPublic Subnetに配置しています。

タスクが起動したらECS Execが有効化されているか確認します
$ aws ecs describe-tasks --cluster <YOUR CLUSTER NAME> --tasks <YOUR ECS TASK ARN> | grep enable
"enableExecuteCommand": true,
ECS Execを行う


refs
- What's New at AWS - Cloud Innovation & News
- Amazon ECS task IAM role - Amazon Elastic Container Service
- Monitor Amazon ECS containers with ECS Exec - Amazon Elastic Container Service
所感
AWSコンソール上からのECS Execの有効化は、SSM経由のため既存のタスクロールのポリシーに追記・SSMまでの経路の確保などがあります。
AWS CLI(aws ecs execute-command)で実行したいたことが「ワンボタンでコンソール(CloudShell)上でできるようになった」という形なため、以前から使用していた方は追加の設定無く使用できるかと思います。
CloudShellが強化されていく未来を感じる非常に嬉しいアップデートですね。