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

作業の流れ

  1. ecs describe-services で enableExecuteCommand を確認します
  2. falseの場合:aws ecs update-service で true にします(--force-new-deploymentで起動する必要がある)
  3. タスクロールに SessionManager が使用できるポリシーを付与します
  4. 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 に書き込みます。

ECS Exec

コマンドを実行

$ 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ではありません)。