ECS Execを使って Fargateのコンテナにアクセスする


はじめに

本記事では、ECS Exec の機能を使って、稼働中の Fargate のコンテナにアクセスする時の簡易な手順について、記載しています。

アクセスする Fargate のコンテナ周りの環境は、下図になります。

ECS Execは、SSM エージェントのバイナリを、下図のようにコンテナにバインドマウントして、Systems Manager (SSM) の Session Manager 経由で、アクセスできるようにしているようです。

引用:Github での Proposal

前提条件

Fargate のコンテナサイド

  • ECS サービスを実行するプラットフォームのバージョンが1.4.0 以降であること。
  • Fargate のコンテナが Systems Manager (SSM) のエンドポイントに接続できること。

アクセスするクライアントサイド

  • ECS Exec コマンドを実行するための AWS CLI がインストールされていること。
AWS CLI 対応バージョン
v1 1.19.28 以降
v2 2.1.31 以降
  • AWS CLI 用の Session Manager plugin がインストールされていること。

参考:
AWS CLI バージョン 1 のインストール、更新、およびアンインストール
AWS CLI バージョン 2 のインストール、更新、およびアンインストール
(オプション) AWS CLI 用の Session Manager plugin をインストールする

ECS Exec を有効にする

下記コマンドで、AWS CLI が対応するバージョンか確認します。

$ aws --version
aws-cli/1.19.92 Python/3.7.4 Darwin/18.7.0 botocore/1.20.92

下記コマンドで、Session Manager plugin がインストールされているか検証します。(下記のメッセージが出力されていれば、OKです。)

$ session-manager-plugin

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

アクセスするタスク(コンテナ)の IAM ロール に下記のSSM エージェントの実行用のポリシーをアタッチします。

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

下記コマンドで、ECS サービスの ECS Exec を有効にします。

$ aws ecs update-service --region ap-northeast-1 --cluster [クラスター名] --service [サービス名] --enable-execute-command

##出力結果
{
    "service": {
省略
        "enableExecuteCommand": true
    }
}

下記コマンドで、ECS サービスの ECS Exec が有効になったことを確認します。( true と出力されていれば OK です )

$ aws ecs describe-services --region ap-northeast-1 --cluster [クラスター名] --services [サービス名] | jq '.services[].enableExecuteCommand'

true

有効にしたサービス上で、新しく起動したタスクに対してのみ ECS Exec は使用できます。
サービスを更新するなどして、タスクを再デプロイして下さい。

Fargate のコンテナにアクセス

ECS Exec を有効にしたサービス上で起動した タスク ID を確認します。

下記コマンドで、Fargate のコンテナにアクセスします。(Starting session...と出力されれば OK です)

aws ecs execute-command --region ap-northeast-1 --cluster [クラスター名] --task [タスク ID] --container [コンテナ名] --interactive --command "/bin/sh"


The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-07cfe2faxxxxxxxxxxxxxxxxx

Systems Manager (SSM) の Session Manager 上でも接続されていることを確認できます。

詳細な使用方法

より詳細な使用方法は、下記が参考になります。

New – Amazon ECS Exec による AWS Fargate, Amazon EC2 上のコンテナへのアクセス

デバッグに Amazon ECS Exec を使用する