LoginSignup
2
1

More than 1 year has passed since last update.

ECS exec 利用手順

Last updated at Posted at 2021-07-16

本記事は、AWS ECS on Fargateへ ECS execを利用してシェルログインを行う手順を記載する。

ECS execについて

ECS execは、ECSクラスター上で起動している ECSインスタンス / Fargate に対してコンテナ内でコマンドを実行したり、シェルを取得する事が出来る機能。

image.png

前提条件

  • ECS Exec は対象が Linux コンテナでのみサポートされる。
  • AWS Management Console からの実行は不可能でAWS CLI から行う必要がある。 また、AWS CLI バージョン 1.19.28 以上 または バージョン 2.1.31 以上でないと、コマンドが実行できないため注意が必要。
  • Systems Manager の Session Managerを利用して、実行中のコンテナとの接続を確立するため、インターフェイス Amazon VPC エンドポイントを作成する必要がある。
  • EC2にて利用する場合、2021年 1月 20日以降にリリースされた Amazon ECS 最適化済みの AMI 、エージェントバージョン 1.50.2 以上で使用する必要がある。 Fargateにて利用する場合は、プラットフォームバージョン 1.4.0 以上を使用する必要がある。

手順

IAMロール

ECS Exec を使用するためには、ECSタスクロールに SSMエージェントとSSMサービス間の通信に必要な権限をコンテナに付与する必要がある。
ECS Exec で使用するコンテナのタスクロールに、以下の IAM ポリシーを追加する。

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

ECS on Fargate

ECS クラスター / サービス / タスク定義は既に作成している前提

既に使用しているタスクに対して ECS Execを有効する事は出来ない。
そのため、サービスに設定されている "enableExecuteCommand" という ECS Execを有効にする設定の変更を行う必要がある。
enableExecuteCommandはデフォルトで falseとなっている。

aws ecs describe-services --cluster <cluster-name> --service <service-name>

image.png

サービスの更新を行い、 enableExecuteCommandを tureに変更する。

aws ecs update-service --cluster <cluster-name> --service <service-name> --enable-execute-command 

image.png

enableExecuteCommandが trueになっている状態から起動をしないとタスクは有効にならない。

aws ecs describe-tasks --cluster <cluster-name> --tasks <task-ID>

image.png

サービスが更新された状態でタスクを起動して、enableExecuteCommandが有効になっているか確認する。
image.png

この状態で ECS Execが使用可能となるため、ecs execute-commandを実行してシェルログインを行う。
ecs execute-commandでは --interactive / --commandオプションが必須であり、 --commandでは、コンテナで実行するコマンドを指定する。

aws ecs execute-command --cluster <cluster-name> --task <task-ID> --container <container-name> --command "<command>" --interactive

コンテナに対してシェルログインを行う場合は、 --command "/bin/bash" を指定して、実行すると、セッションがスタートし、ログインが可能となる。

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1