y-ohgi's blog

TODO: ここになにかかく

ECS execをAWSコンソール上から行う

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

所感

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