前提
クラスター、タスク定義、サービスは作成済をする
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": "*"
}
]
}