ecstaを使ってAmazon ECSコンテナ開発効率を上げよう!
Amazon ECSでコンテナ開発・運用していると、デバッグのためにコンテナに入って調査したり、タスク起動失敗時のログを調査したり、Fargateを踏み台にポートフォワードなどのように、アドホックにコンテナを操作したいことがあります。
そんなときにぴったりなのが、ecspressoの開発でもお馴染み @fujiwara さん作による ecsta("ECS Task Assistant") です。
ECS利用者にとって、スイスアーミーナイフのように役立ってくれるでしょう。
注意
ecsta はアルファ版です。
バグや将来的な仕様変更は大いにあります。
自己責任でご利用ください。
機能一覧
helpコマンドから、以下の機能を確認できます
- タスクをlist
- タスクをdescribe
- タスクのログを表示
- タスクのイベント・ログを時系列順に表示
- タスクの停止
- ECS Exec
- タスクを踏み台にしたポートフォワード
$ ecsta --help
Usage: ecsta <command>
Flags:
-h, --help Show context-sensitive help.
-c, --cluster=STRING ECS cluster name ($ECS_CLUSTER)
-r, --region=STRING AWS region ($AWS_REGION)
-o, --output="table" output format (table, tsv, json)
Commands:
configure
Create a configuration file of ecsta
describe
Describe tasks
exec
Execute a command on a task
list
List tasks
logs
Show log messages of a task
portforward --local-port=INT --remote-port=INT
Forward a port of a task
stop
Stop a task
trace
Trace a task
version
Show version
Run "ecsta <command> --help" for more information on a command.
以下では、いくつかの機能を実際に触ってみます。
すべて直感的に操作可能です。
インストール方法
Macから
$ brew install fujiwara/tap/ecsta
タスクを一覧表示
$ ecsta list --cluster test
| ID | TASKDEFINITION | INSTANCE | LASTSTATUS | DESIREDSTATUS | CREATEDAT | GROUP | TYPE |
+----------------------------------+------------------+----------+------------+---------------+----------------------+-------------+---------+
| ae8bd3553e9247308fd488b268de766b | sample-fargate:1 | | RUNNING | RUNNING | 2022-11-23T14:39:55Z | service:web | FARGATE |
タスクのイベント・ログを時系列順に表示
対象のタスクをドリルダウンしながら、タスクのイベント・ログを時系列順に表示します。
$ ecsta trace
test
Enter cluster name: test
cluster name=test
ae8bd3553e9247308fd488b268de766b sample-fargate:1 RUNNING RUNNING 2022-11-23T14:39:55Z service:web FARGATE
Enter task ID: ae8bd3553e9247308fd488b268de766b
task ID=ae8bd3553e9247308fd488b268de766b
Tracer: arn:aws:ecs:eu-central-1:123456789012:task/test/ae8bd3553e9247308fd488b268de766b on test
2022-11-23T14:39:55.818Z TASK Created
2022-11-23T14:39:55.848Z SERVICE (service web) has started 1 tasks: (task ae8bd3553e9247308fd488b268de766b).
2022-11-23T14:39:59.199Z TASK Connected
2022-11-23T14:40:07.354Z TASK Pull started
2022-11-23T14:40:11.905Z TASK Pull stopped
2022-11-23T14:40:13.113Z TASK Started
2022-11-23T14:40:14.504Z SERVICE (service web) has reached a steady state.
2022-11-23T17:11:54.763Z CONTAINER:fargate-app LastStatus:RUNNING HealthStatus:UNKNOWN
2022-11-23T17:11:54.763Z TASK LastStatus:RUNNING
ドリルダウンは他のコマンドでも利用可能です。
クラスターとタスクIDを直接指定することもできます。
$ ecsta trace --cluster test --id ae8bd3553e9247308fd488b268de766b
Tracer: arn:aws:ecs:eu-central-1:123456789012:task/test/ae8bd3553e9247308fd488b268de766b on test
2022-11-23T14:39:55.818Z TASK Created
2022-11-23T14:39:55.848Z SERVICE (service web) has started 1 tasks: (task ae8bd3553e9247308fd488b268de766b).
...
fujiwara さん作のtracertというツールがありますが、その機能が ecsta の1機能として取り込まれています。
ECS Exec
Amazon ECS にはコンテナをインタラクティブにシェル操作する ECS Exec という機能があります(docker exec
のECS版)。
ecsta exec
はそのラッパーです。クラスター名とタスクIDを指定します。
$ ecsta exec --cluster test --id ae8bd3553e9247308fd488b268de766b
Starting session with SessionId: ecs-execute-command-0195ed1b7b9b3d795
#
ポートフォワード
ECS ExecはAWS Systems Manager Session Managerを利用して機能が実現されています。
別の言い方をすると、同サービスで提供されている機能は、SSM AgentがインストールされたECS Fargate環境でも利用できるということです。
ポートフォワードの設定
Systems Manager Session Managerの便利な機能の一つにポートフォワードがあります。
この機能を利用し、ECS Faragetを踏み台にして、同じVPC内のRDSに接続するには、以下のコマンドを実行します。
$ ecsta portforward \
--local-port=3306 \
--remote-port=3306 \
--remote-host=テスト.XXX.リージョン.rds.amazonaws.com \
--cluster=test \
--id=ae8bd3553e9247308fd488b268de766b
Starting session with SessionId: xxx-0b67d5c7e0df166e9
Port 3306 opened for sessionId xxx-0b67d5c7e0df166e9.
Waiting for connections...
Connection accepted for session [xxx-0b67d5c7e0df166e9]
このコマンドでは、リモートホスト(テスト.XXX.リージョン.rds.amazonaws.com
)の 3306 ポートをローカルの 3306 ポートにフォワードしています。
クライアント環境から接続
ポートフォワードした状態で、クライアント環境の別ターミナルから、ローカルホストの 3306 ポートに接続します。
$ mysql -h localhost --protocol=tcp -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 39
Server version: 10.3.34-MariaDB-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
無事接続できました。
最後に
fujiwaraさん作のECSタスク関連操作にフォーカスした新しいツールecstaを紹介しました。
まだアルファ版ですが、主要機能は実装済みであり、過去の資産を活かしているためか、高品質に感じました。
ECS利用者は一度評価してみましょう。
Discussion