⚒️

tsm (Session ManagerでEC2インスタンスに同時接続して同時操作するツール)を作った

2023/05/04に公開

本記事は、Qiitaに投稿した記事のマルチポストです。

概要

掲題の通りです。
tsmというSession Managerで複数台のEC2インスタンスへ同時接続して同時操作するツールを作りました。
(Tmux Session Managerの略)

https://github.com/kotatsu360/tsm

MITライセンスです。

デモ

demo.gif

モチベーション

  • Session Managerでの接続をもっと簡単にしたい(インスタンスIDを何度も調べたくない)
  • 「SSHで複数台に同時接続」という体験をSession Managerでも再現したい

仕組み

  • awscliで対象のインスタンスを絞り込む
  • tmuxのウィンドウを複製しつつ、ssm start-sessionを繰り返す

使い方

迷ったらtsm -hもしくはtsm --helpをご覧ください。以下、機能のご紹介です。

リスト機能

tsm -lもしくはtsm --listで、存在するEC2のインスタンスIDとNameを取得します。

裏ではawscliを呼び出しており、-p/--profile-r/--regionの指定で、権限やリージョンを切り替えられます。

$ tsm -l
i-076a3c31dbf0af073	MyServer
i-0b55c94fbcedc0863	MyServer
i-0325abf52cb86ad50	MyServer2

$ tsm -l  -p default -r ap-northeast-1
i-076a3c31dbf0af073	MyServer
i-0b55c94fbcedc0863	MyServer
i-0325abf52cb86ad50	MyServer2

同時接続機能

tsmの引数にNameもしくはインスタンスIDを渡すことでそれに接続します。

# Name=MyServerのインスタンスに接続します。Nameに一致するインスタンスが複数ある場合は、そのすべてに接続します。
$ tsm MyServer

# NameとインスタンスIDは混在できます
$ tsm MyServer i-0325abf52cb86ad50

# もちろん、複数のNameを指定することも可能です
$ tsm MyServer MyServer2 #...

冒頭のデモが、実際に接続した時の様子です。

その他

-o/--optionsで指定した文字列は、そのままaws ssm start-sessionにオプションとして渡されます。
tsmを使いつつ、追加で--reasonなどを指定することも可能です。

もう少し良くしたいところ

  • 存在しないName / インスタンスIDが指定された時の挙動
  • インストール手順

さいごに

必要なIAM権限など、READMEの方にも色々書きました。
興味を持ってくださった方は、ぜひリポジトリの方もご覧ください。

https://github.com/kotatsu360/tsm

star / issue / pr などリアクションをいただけると小躍りして喜びます。

謝辞

特に次の記事が参考になりました。ありがとうございます。

Discussion