2
3

More than 1 year has passed since last update.

ECS Exec を有効化してrun-task を実行する

Posted at

はじめに

本記事では、ECS Exec の機能を使って、run-taskを実行する簡易ま方法について記載しています。

前提条件

Fargate のコンテナサイド

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

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

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

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

  • 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 をインストールする

下記コマンドで、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.

ECS Exec を有効化してrun-task を実行する

run-task のコマンドオプションに、--enable-execute-command を設定する箇所がポイントとなります。

#!/bin/bash
#
# ECS Exec を有効化して run-task
#

# クラスター名
CLUSTER_NAME="xxxxxxxxxxxxxxxxx"
# サブネットID
SUBNET_ID="subnet-xxxxxxxxxxxxxxxxx"
# タスク定義名
TASK_NAME="xxxxxxxxxxxxxxxxx"
# セキュリティグループID
SG_ID="sg-xxxxxxxxxxxxxxxxxx"
# パブリックIP割当て(ENABLED もしくは DISABLED)
PUBLIC_IP_ASSIGN="ENABLED"

# タスク定義 ARN
TASK_DEF_ARN=$(aws ecs list-task-definitions \
--family-prefix "${TASK_NAME}" \
--query "reverse(taskDefinitionArns)[0]" \
--output text) \
&& echo "${TASK_DEF_ARN}"

# ネットワーク
NETWORK_CONFIG="awsvpcConfiguration={subnets=[${SUBNET_ID}],securityGroups=[${SG_ID}],assignPublicIp=${PUBLIC_IP_ASSIGN}}"

# タスク実行
aws ecs run-task \
--cluster "${CLUSTER_NAME}" \
--task-definition "${TASK_DEF_ARN}" \
--network-configuration "${NETWORK_CONFIG}" \
--enable-execute-command \
--launch-type FARGATE

ECS Exec を有効化したコンテナにアクセスする

ECS Exec を有効にして起動した タスク ID を確認します。
01_fargate_ecs_exec.png

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

aws ecs execute-command \ 
--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

参考

AWS CLI を使って Amazon ECS のタスクを手動で実行する

2
3
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
3