ECS Exec
ECSに Session Manager を使用してログインします。
準備 AWS CLI 用の Session Manager をインストール
- https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos
- https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-verify
作業の流れ
ecs describe-servicesでenableExecuteCommandを確認します- falseの場合:
aws ecs update-serviceでtrueにします(--force-new-deploymentで起動する必要がある) - タスクロールに
SessionManagerが使用できるポリシーを付与します aws ecs execute-commandでECS Execを実行します
1. ECS サービスを enableExecuteCommand=true にする
Web マネジメントコンソールで enableExecuteCommand を設定する方法はありません。
AWS CLI でサービス作成時に有効にするか更新する。
現状の確認:
$ aws ecs describe-services \
--cluster \
--services \
--profile
enableExecuteCommand が true であることを確認します。
"enableExecuteCommand": true
false の場合は、aws ecs update-service で enableExecuteCommand を true に変更します。
$ aws ecs update-service \
--cluster \
--service \
--enable-execute-command \
--force-new-deployment \
--profile
--services ではなく --service です。
無効にする場合は --disable-execute-command を実行します。
起動しているタスクを停止(再起動される):
enableExecuteCommandをtrueに変更してもタスクを再起動しなければ反映されません- サービスを更新してもタスクが再起動されるわけではありません(
--force-new-deploymentで再起動します)--force-new-deploymentが、手動のデプロイを強制に該当します。
タスクロールに SessionManager が使用できるポリシーを付与
ポリシーを タスクロール(タスク実行ロール ではありません)に付与します。
作成するポリシーは以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
ログを許可すると ECS EXEC でログインして発行したコマンド&コマンド結果(標準出力)を CloudWatch Logs に書き込みます。

コマンドを実行
$ aws ecs execute-command \
--cluster \
--task \
--container \
--interactive \
--command /bin/bash \
--profile playground
he Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# pwd
/var/www/html
# exit
Exiting session with sessionId: ecs-execute-command-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
※ ``はタスク定義のコンテナ名です(コンテナランタイムIDではありません)。