#はじめに
本記事では、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 を確認します。
下記コマンドで、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