概要
掲題の通りです。
tsmというSession Managerで複数台のEC2インスタンスへ同時接続して同時操作するツールを作りました。
(Tmux Session Managerの略)
MITライセンスです。
デモ
モチベーション
- 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の方にも色々書きました。
興味を持ってくださった方は、ぜひリポジトリの方もご覧ください。
star / issue / pr などリアクションをいただけると小躍りして喜びます。
謝辞
特に次の記事が参考になりました。ありがとうございます。