NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    AWS FargateでECS Execを使用するための必要な設定作業についてまとめてみた

    クラウド事業推進部の石倉です。

    表題の通りではありますが、AWS FargateでECS Execを使用するための必要な設定作業についてまとめてみました。

    Amazon ECSをAmazon EC2で利用する場合はEC2インスタンスをこちらで管理できるのでEC2インスタンスに入りコンテナとやり取りできますが、AWS Fargateの場合それができません。
    そのため、AWS Fargateでコンテナとやり取りする際はECS Execが必要になりますが、この際にはいくつかの設定作業が必要になります。 毎回「何をすればいいんだっけ?」と調べ直している自分がいたので改めてまとめてみました。

    ECS Execを使用するために必要な設定作業

    ECS Execを使えるようにするためには大きく以下の作業が必要になります。

    1. AWS CLIのインストールと設定
    2. AWS CLI のセッションマネージャープラグインのインストール
    3. タスクロールの設定
    4. ECS Execの有効化
    5. VPCエンドポイントの作成(Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合)

    1. AWS CLIのインストールと設定

    ECS ExecをCloudShellなどから使用する場合は必要ありませんが、ローカルのPCなどからECS Execを使用する場合はAWS CLIを使える状態にする必要があります。 下記ドキュメントを参考にAWS CLIのインストールと設定を行います。

    AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface

    AWS CLI の設定 - AWS Command Line Interface

    ちなみにECS Execを使用する(execute-commandを実行する)ために必要なユーザー権限は最低限以下が必要になります。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:ExecuteCommand",
                    "ecs:DescribeTasks"
                ],
                "Resource": "*"
            }
        ]
    }

    2. AWS CLI のセッションマネージャープラグインのインストール

    こちらもCloudShellなどの場合は既にインストールされているので必要ありませんが、ローカルのPCなどの場合は対応が必要になります。

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

    3. タスクロールの設定

    ECSで利用するタスク定義に次のような信頼ポリシーおよびIAMポリシーを設定したIAMロールをタスクロールに設定する必要があります。 ECS ExecはSSMセッションマネージャーを利用してコンテナと接続するためSSMサービスへのアクセス許可のIAMポリシーを設定します。

    信頼ポリシー

    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "ecs-tasks.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole",
             "Condition":{
                "ArnLike":{
                   "aws:SourceArn":"arn:aws:ecs:<region>:111122223333:*"
                },
                "StringEquals":{
                   "aws:SourceAccount":"111122223333"
                }
             }
          }
       ]
    }

    IAMポリシー

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

    Amazon ECS タスクの IAM ロール - Amazon Elastic Container Service

    4. ECS Execの有効化

    ECSサービス、タスクに対してECS Execを有効にする必要があります。
    以下の確認コマンドで"enableExecuteCommand": falseとなっている場合はECS Execが無効になっているのでECS Execを使うことができません。

    ## サービスに対してECS Execが有効かどうか
    aws ecs describe-services --cluster {クラスター名} --services {サービス名} | grep enableExecuteCommand
    
    ## タスクに対してECS Execが有効かどうか
    aws ecs describe-tasks --cluster {クラスター名} --tasks {タスクID} | grep enableExecuteCommand

    無効になっている場合はECS Execを有効にする必要があります。

    aws ecs update-service --cluster {クラスター名} --service {サービス名} --enable-execute-command

    先ほどの確認コマンドで"enableExecuteCommand": trueとなっていればECS Execが有効になっています。 ですが既存のタスクに対しては無効となったままなのでタスクを再度立ち上げ直す必要があります。

    ちなみにコンソール上からもECS Execが有効かどうかを確認することができます。

    5. VPCエンドポイントの作成(Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合)

    ECS ExecはSSMセッションマネージャーを利用するためインターネット接続できる必要があります。そのためFargateをパブリックサブネットに配置している、もしくはプライベートサブネットに配置してNATゲートウェイを利用する場合は必要ありませんが、Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合は、FargateがSSMセッションマネージャーと通信ができるようにVPCエンドポイントの作成が必要になります。
    その場合はssmmessagesのインターフェイスVPCエンドポイントを作成します。

    ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する - AWS Systems Manager

    ECS Execを使用してみる

    ここまでの設定が完了していればECS Execが使用できるようになっているはずです。

    ~ $ aws ecs execute-command --cluster dev-ishikura-fargate --task cd73df94e5c4476dbfa0831bccd13d9d --container nginx --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-nxzkgu2yvuyr8qy8bgtpbzyhc4
    # 

    最後に

    ECS Execを使用するためにはこのようにいくつか設定作業が必要になるので「何をすればいいんだっけ?」となる方の手助けになれば幸いです。

    参考

    ECS Exec を使用して Amazon ECS コンテナをモニタリングする - Amazon Elastic Container Service

    ecs — AWS CLI 2.28.6 Command Reference

    おまけ

    AWS Documentation MCP Serverを使ってFargateでECS Execを使用するための必要な設定作業について聞いてみたところ、上記の作業含め前提条件やオプションまで教えてくれました。うーんすごい。

    執筆者 石倉弘隆

    クラウド事業推進部 / クラウドエンジニア