AWS Systems Manager セッションマネージャーを少し便利にしてみる
セッションマネージャでインスタンスに接続する際にはインスタンスIDを事前に知る必要がありますが、マネジメントコンソールやCLIから調べるのが少し面倒だったりします。特に台数が多い場合なんかはそうです。そこでCLIで簡単に接続できるようにしてみました。
必要なもの
下記のインストールが必要になります。
- AWS CLI
- AWS CLI 用の Session Manager Plugin
- fzf
検証した環境
- OS: macOS Mojave 10.14.6
- AWS CLI: aws-cli/1.16.220 Python/3.7.4 Darwin/18.7.0 botocore/1.12.210
- session-manager-plugin: 1.1.26.0
設定
~/.aws/cli/alias
ファイルを作成し、下記のエイリアスを追加するだけです。私はstart-session
を省略してss
としました。
[toplevel] ss = !f() { instance_id=$(aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId, State.Name, InstanceType, PrivateIpAddress, Platform || `Linux`, Tags[?Key == `Name`].Value | [0]]' --output text | column -t | fzf --reverse | cut -d ' ' -f 1) aws ssm start-session --target ${instance_id} }; f
AWS CLIのエイリアスについては下記の記事をご参照ください。
実行
セッションを開始するには次のコマンドを実行します。
$ aws ss
するとインスタンスの一覧がfzfで表示された状態になるので、Nameタグを入力して絞り込むか、CTRL + n
、CTRL + p
、またはカーソルキーで選択行を移動できるので、目的のインスタンスを選択した状態でEnter
を押せば接続できます。
fzfではインクリメンタルなあいまい検索ができるので、適当に入力できるのが魅力です。
fzfでweb
で絞り込んだ様子。最後の2行がヒットしている理由はwindows
のw
、dev
のe
、batch
のb
がweb
でヒットしているためです。ただ優先順位が低くなっており最後に表示されています。
> web 6/10 i-xxxxxxxxxxxxxxxxx running t2.small 10.0.0.13 Linux aaaa-dev-web-01 i-xxxxxxxxxxxxxxxxx running t2.small 10.0.0.12 Linux aaaa-dev-web-02 i-xxxxxxxxxxxxxxxxx running t2.medium 10.0.0.21 Linux demo-dev-web-01 i-xxxxxxxxxxxxxxxxx running t2.medium 10.0.0.11 Linux demo-stg-web i-xxxxxxxxxxxxxxxxx running t2.small 10.0.0.31 windows bbbb-dev-batch-01 > i-xxxxxxxxxxxxxxxxx running t2.small 10.0.0.42 windows bbbb-dev-batch-02
セッションが開始されると次のような結果になります。
$ aws ss Starting session with SessionId: 1567245391-02192adb9299aaf52 sh-4.2$
最後に
少し便利になったのではないでしょうか。エイリアスとfzfを活用すれば他にも色んなことができそうです。