とうとう3月になりましたね。。
もう1年の1/6が終わったというのが信じられません。

ということで本題です。

私は普段、ECSを触る機会が多いのです。ECSを扱う上で欠かせないのがECS Execです。
このECS Execを快適に実行するためのスクリプトを本記事で共有できればと思います。

ソースコードはGithubで公開しているので、ご利用いただけると幸いです。

モチベーション : ECS ExecでタスクIDの指定とかめんどくさい

ECSのコンテナに対してコマンド実行したい時って結構あると思います。そんな時に重宝されるのがECS Execです。コマンドラインから対象のクラスター/タスク/コンテナを指定するだけで、コマンド実行やログインが可能です。

このECS Execですが、実行するたびにクラスター名/タスクID/コンテナ名を指定する必要があります。クラスター名/コンテナ名は基本的に変わらないのですが、タスクIDは頻繁に変わります。
そのため、ECS Execの実行前にマネコンやAWS CLIにてタスクIDを取得して…ということをやる必要がありました。

それが非常に面倒なので、ECS Execをインタラクティブなスクリプトに組み込んで、タスクIDなどの一覧を動的に取得して、対話形式で対象を選択できるようにしました。

スクリプトの使用イメージ

スクリプトを実行します。

❯ ./ecs-exec.sh             

次に利用できるAWSプロファイルが表示されます。
この時プロファイルを指定すると、そのプロファイルを利用してECS Execを実行します。
プロファイルを指定しなければ、デフォルトプロファイルを利用してECS Execを実行します。

利用可能なAWSプロファイル:
profile-a
profile-b

使用するAWSプロファイルを入力してください(デフォルトの場合は空欄): 

クラスター一覧が取得されて、リストで表示されます。
次に対象のクラスターを選択して、番号を入力します。

ECSクラスターを取得中...
利用可能なクラスター:
1) ecs-cluster-hoge
2) ecs-cluster-fuga

クラスター番号を選択してください: 2
選択されたクラスター: ecs-cluster-fuga

選択したクラスター内のタスク一覧が取得されて、リストで表示されます。
対象のタスクを選択して、番号を入力します。

タスクを取得中...
利用可能なタスク:
1) 1ea4799d8a6b4d56f4ba2254f5f1185a (ecs-cluster-fuga-app:10) - RUNNING
2) 2aba49846022d1ea85431e3840f918f9 (ecs-cluster-fuga-app:10) - RUNNING

タスク番号を選択してください: 1
選択されたタスク: 1ea4799d8a6b4d56f4ba2254f5f1185a

選択したタスク内のコンテナが表示されるので、同じように番号を入力します。

コンテナを取得中...
利用可能なコンテナ:
1) web
2) app
3) sidecar

コンテナ番号を選択してください: 2
選択されたコンテナ: app

実行するコマンドを入力します。
何も入力しない場合は/bin/shを実行します。

実行する予定のコマンドが表示されるので、問題なければyを入力します。
すると、実際にECS Execコマンドが実行されます。

実行するコマンドを入力してください(デフォルト: /bin/sh): 
以下のコマンドを実行します:
aws ecs execute-command --cluster ecs-cluster-fuga --task 1ea4799d8a6b4d56f4ba2254f5f1185a --container app --command "/bin/sh" --interactive

実行しますか? (y/n): y
コマンドを実行中...

スクリプトの仕様について

何も難しいことはやっていません。

  • AWSプロファイルの選択
  • 利用可能なECSクラスターの一覧表示と選択
  • 選択したクラスター内のタスクの一覧表示と選択
  • 選択したタスク内のコンテナの一覧表示と選択
  • 実行するコマンドの入力

上記を順次、readコマンドにより対話形式で行います。
一覧はaws cliで取得して、grepやjrで加工しています。

詳細については、githubのソースコードをご参照ください。

最後に

このスクリプトをエイリアスにしたり、PATHを通したりすれば簡単に呼び出せるようになります。
こういう類のツールはたくさんありますので、自分が利用しやすいものを利用いただければ良いかなと。

それでは良いECSライフを!