ECS ExecでECSタスクにログインする方法

オフショア開発

弊社で請け負うシステム開発ではECSを利用してアプリケーション構築するパターンが多いのですが、ECSタスクにログインして任意のコマンドを実行したい場合があります、例えばリリース前に初期データ投入プログラムを実行する場合などです。

本記事ではECS ExcecをCloud Shellから実行してECSタスクにログインする方法を書きたいと思います。

事前準備

まずは事前準備としていくつか設定する必要があります、むしろメインがこの「事前準備」です。

ECSタスクロールにIAM Policyを追加

ECSタスクの「タスクロール」には追加でSessionManager関連のPolicyが必要で下記を追加設定します。「タスク実行ロール」ではないことに注意してください。

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

ECS ExecをONにする

ECS ExecがONになっているか確認するためにはawsコマンドで確かめる必要があります。
そこでCloudShellでawsコマンド実行するんですが、CloudShellはAWSコンソールの右上の下記アイコンをクリックします。

CloudShellのアイコン

するとCLIが立ち上がるので、ここでawsコマンドを打っていきます。

変数に各種IDをセットしておく

まずオススメなのが変数にECSサービスIDやECSタスクIDなどの値を設定しておくことで、後続のawsコマンドをスッキリ簡単に実行することができます。下記はそのコマンド例で変数に各種IDを設定しておきます。

cluster=sample-app-cluster
service=sample-app-service
task=123ab456def789ghi123ab456def789ghi
container=apache

ECSサービスがECS ExecがONなっていることを確認する

次にログイン対象のECSサービスのECS ExecがONになっているか確認します

aws ecs describe-services \
  --cluster $cluster \
  --services $service \
  --query 'services[0].enableExecuteCommand'

結果が false の場合はOFFになっています。

ECSサービスのECS ExecをONにする

下記コマンドでONできます

aws ecs update-service \
  --cluster $cluster \
  --service $service \
  --enable-execute-command

ECSタスクのECS ExecをONにする

ECSサービスのECS ExecをOFFからONにした場合、配下のECSタスクを新しく起動しなおす必要があります。そうすることで新しく起動したECSタスクもenableExecuteCommandがtrueとなります。
ECSタスクがONになったか確認するコマンドは下記です。

aws ecs describe-tasks \
--cluster $cluster \
--tasks $task \
--query 'tasks[0].enableExecuteCommand'

ECSタスクにログインする

事前準備が終わればあとは簡単で、CloudShellで下記コマンドを打つだけです。

aws ecs execute-command --cluster $cluster --task $task --container $container --interactive --command "bash"

エラーが出る場合

事前準備をしてもエラーになるケースがあります、その場合はAWS公式でも紹介されているECS Exec Checkerを使います。

GitHub - aws-containers/amazon-ecs-exec-checker: 🚀 Pre-flight checks for ECS Exec
🚀 Pre-flight checks for ECS Exec. Contribute to aws-containers/amazon-ecs-exec-checker development by creating an account on GitHub.

使い方はローカルで下記の手順で実行します、すると何が原因でエラーになっているか調査することができます。

# ソースコードをClone
git clone git@github.com:aws-containers/amazon-ecs-exec-checker.git
cd amazon-ecs-exec-checker

# AWSにログイン
aws configure

# チェック
./check-ecs-exec.sh <YOUR_ECS_CLUSTER_NAME> <YOUR_ECS_TASK_ID>


オフショア開発ならCRAID!

オフショア開発とは、システム開発業務などを海外の開発会社や海外子会社に委託することです。

CRAIDは東証プライム上場のフリービット株式会社の子会社です。CRAIDのオフショア開発拠点「フルスピードテクノロジーズ」は、当初は月間3000億ものリクエスト処理にも対応できる自社システム開発を行うためのオフショア開発部門として始まりました。各グループ会社の開発やクライアント様の受託開発やラボ型開発も多く手掛けております。

CRAIDやオフショア開発に関して、お気軽にお問い合わせください。

この記事を書いた人

社内経歴としては、社内システムの開発・保守から始まり、セブ開発拠点の立ち上げメンバーとしてフィリピン駐在、その後日本に帰国し受託開発やオフショア開発事業に参画し、様々な開発プロジェクトに参加しております。

taroshinをフォローする
オフショア開発環境・プラットフォーム
CRAID オフショア開発ブログ
タイトルとURLをコピーしました