ECSの作業効率が爆上がりするツール「ecsk」の使い方
ecskとは
ecskはAWS ECSの操作を簡単にできるCLIツールです。
通常$aws ecs
のコマンドはパラメータが多く複雑になりがちですが、ecskを使うと短いコマンドでECSタスクの実行やログの取得が可能になります。
個人的にはECSのコンテナに乗り込む時などに、タスクのARNを確認する手間が毎回発生するのが非効率だと思っていましたが、そこを楽にできるところが1番の推しポイントです。
数年前にECS Execという機能が出てから、デバッグなどでECSのコンテナに乗り込むためには、以下のようなコマンドを実行する必要がありました。
$ aws ecs execute-command \
--cluster {cluster_name} \
--task {task_arn} \
--container {container_name} \
--interactive \
--command "/bin/sh"
クラスター、コンテナ名は不変ですが、タスクのARNはタスクが新しくなる度に変わってしまいます。
(ECS Execが出る前はEC2からdocker execで乗り込む必要があったので、これでも運用としてはかなりマシになりましたが、、)
ecskを使えば以下コマンドを実行するだけで、クラスターやサービス、タスクの一覧が表示されて、あとはインタラクティブに選択してタスクへ乗り込むことが可能です!
$ ecsk exec -i -- /bin/sh
他にも便利な機能が沢山あるので紹介します。
インストール
Macの場合はbrewでインストール可能です。Windowsの場合はリリースからダウンロードしてください。
$ brew install yukiarrr/tap/ecsk
使い方
ecskの各コマンドと、対応するaws ecsのコマンドも記載します。
タスクの実行
インタラクティブにタスクの情報を選択し、タスクが起動し終了するまでログが流れ続けます。
$ ecsk run
# aws ecs run-task --cluster {cluster_name} --task-definition {task_def}
ecsk runコマンドはオプションが沢山あるため、困ったら-hオプションを使ってみてください。
$ ecsk run -h
$ ecsk -h # ecsk自体のコマンドを確認する時はこちら
タスクの停止
インタラクティブにタスクを選択し、タスクを停止します。※複数選択可
$ ecsk stop
# aws ecs stop-task --task {task_arn}
タスク情報の確認
インタラクティブにタスクを選択し、タスクの詳細情報を表示します。※複数選択可
$ ecsk describe
# aws ecs describe-task-definition --task-definition {task_def}
ログの取得
インタラクティブにタスクを選択し、ログを表示します。※複数選択可
(CloudWatch Logsに保存されている該当タスクのログを取得して表示してくれます)
$ ecsk logs
# 該当する直接的なコマンドは無し
# aws ecs describe-tasksでログ設定を確認し、aws logs tailと似たことをしてくれる
ファイルのコピー
ローカルとECS間のファイルコピーも可能です。
$ ecsk cp {local_file_path} {container_name}:/etc/nginx/ # local to remote
# 該当する直接的なコマンドは無し
# aws ecs execしてからscpするなど
内部的にS3バケットを使用してコピーを実行しているため、タスクロールに対応するバケットへの権限を付与しておく必要があります。
タスクへログイン(冒頭のやつ)
インタラクティブにタスクを選択し、タスクにログインします。
$ ecsk exec -i -- /bin/sh
# aws ecs execute-command --cluster {cluster_name} --task {task_arn} --container {container_name} --interactive --command "/bin/sh"
まとめ
ECSタスクの実行/ログ確認などが簡単にでできるため、日々のストレスから解放されて開発/運用効率が爆上がりします。
一点気を付けたいのは、インタラクティブに選択して簡単に実行できてしまうがゆえに、ecsk runやstopなどのコマンドは本番環境で実行する場合は慎重に行う必要がありそうです。
日常的にECSを利用する人は導入すると非常に便利だと思うので、もし気になった人は是非試してみてください。
Discussion