ECS Execでコンテナにログインする

Pocket

前提

クラスター、タスク定義、サービスは作成済をする

AWS CLIでサービスのenableExecuteCommandを有効にする

aws --profile=default --region ap-northeast-1 ecs update-service \
--cluster cluster_name \
--service service_name \
--enable-execute-command

確認コマンド

aws --profile=default --region ap-northeast-1 ecs describe-services \
--cluster cluster_name \
--services service_name | jq '.services[].enableExecuteCommand'

※ECS Execを有効化しただけではコンテナにログインできないので、再度タスク実行が必要

aws --profile=default --region ap-northeast-1 ecs describe-tasks \
--cluster cluster_name \
--tasks XXXXXXXXX | jq '.tasks[].enableExecuteCommand'

この時点で両方のコマンドがtrueで返ってくることを確認しておく

コンテナへログイン

aws --profile=default ecs execute-command  \
--region ap-northeast-1 \
--cluster cluster_name \
--task XXXXXXXXX \
--container container_name \
--interactive \
--command "/bin/bash"

エラー 1

An error occurred (InvalidParameterException) when calling the ExecuteCommand operation: The execute command failed because execute command was not enabled when the task was run or the execute command agent isn’t running. Wait and try again or run a new task with execute command enabled and try again.

対応

起動 Task で enableExecuteCommand = true になっていなかったので再度タスク実行を行った

エラー 2

An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.

対応

ECSのタスクロールにSSM関連の権限を与えて再度タスク実行を行った

以下のポリシーを追加した

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"
        }
    ]
}