movee(モビー) オノデラのブログ

(株)movee代表。週末は自社サービスを作っています。

ECS execでコンテナにログインして調査する

2021年頃からECSコンテナにログインできるようになったのでログイン方法をメモする。権限付与やexecute-commandをtrueにする必要があるなど、ローカルでdockerコンテナにログインするより面倒だが、まぁ便利なのでメモする。

参考: ECS ExecでFargateにログインしてコマンドを実行する - karakaram-blog

やること

  • SESSION Managerプラグインのインストール
  • ECSloginPolicy(仮)をユーザーにアタッチする
  • execute-commandをtrueにする
  • ログインする

SESSION Managerプラグインのインストール

・SESSION Managerを以下のサイトを参考にインストールする。

(オプション) AWS CLI 用の Session Manager プラグインをインストールする - AWS Systems Manager

・ECSloginPolicy(仮)をユーザーにアタッチする onody00というユーザーがあるとしたらそのユーザーに以下のユーザー管理ポリシーを作成してアタッチする。なお、onody00は~/.aws/credentialsに定義してある必要がある。 ただもしかしたら、このポリシーはECSタスクロールにアタッチしないといけないのかも。現状、IAMユーザー、ECSタスクロールにアタッチしてる

ECSloginPolicy

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

}
・execute-commandをtrueにする

ターミナルで以下を実行

$aws ecs update-service --cluster クラスター名 --service サービス名 --profile ユーザー名(onody00など)--region ap-northeast-1 --enable-execute-command --task-definition タスク定義名--desired-count 2 --force-new-deployment

・サービスのenableExecuteCommand確認してtrueになるかを確認しておく

aws ecs describe-services --cluster クラスター名 --service サービス名 --profile ユーザー名(onody00など)--region ap-northeast-1  | jq '.services[].enableExecuteCommand'

trueが返ってこればOK。なんかわからんがこっちはfalseが返って来る場合があったが、まぁtrueになったから良し。

・タスクのenableExecuteCommand確認してtrueになるかを確認しておく

$aws ecs describe-tasks --cluster クラスター名 --service サービス名 --profile ユーザー名(onody00など)--region ap-northeast-1   --tasks タスクID | jq '.tasks[].enableExecuteCommand'

ちなみにタスクIDを探すには以下コマンドでtaskIDを取得して指定する。コンパネで動いているタスクを探す、でも良い。

$aws ecs list-tasks --cluster クラスター名 --service-name サービス名 --profile ユーザー名(onody00など)  --region ap-northeast-1

・コンテナにログインする

$aws ecs execute-command --cluster クラスター名 --profile ユーザー名(onody00など)--region ap-northeast-1 --task タスクID --container サービス(コンテナ)名 --interactive --command "/bin/sh"

これでログインできるはず。