AWS Systems Manager セッションマネージャーを少し便利にしてみる

2019.08.31

セッションマネージャでインスタンスに接続する際にはインスタンスIDを事前に知る必要がありますが、マネジメントコンソールやCLIから調べるのが少し面倒だったりします。特に台数が多い場合なんかはそうです。そこでCLIで簡単に接続できるようにしてみました。

必要なもの

下記のインストールが必要になります。

検証した環境

  • 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 CLIにalias機能が追加されました

実行

セッションを開始するには次のコマンドを実行します。

$ aws ss

するとインスタンスの一覧がfzfで表示された状態になるので、Nameタグを入力して絞り込むか、CTRL + nCTRL + p、またはカーソルキーで選択行を移動できるので、目的のインスタンスを選択した状態でEnterを押せば接続できます。

fzfではインクリメンタルなあいまい検索ができるので、適当に入力できるのが魅力です。

fzfでwebで絞り込んだ様子。最後の2行がヒットしている理由はwindowswdevebatchbwebでヒットしているためです。ただ優先順位が低くなっており最後に表示されています。

> 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を活用すれば他にも色んなことができそうです。