pecoでSSM start sessionの対象を選ぶ

最近踏み台サーバーをやめて、AWS SSM(System Manager)のstart-sessionでノードに入るようにしています。(そもそもノードに入ることが少ないのですが)

でも、CLIでいっぱいノードがある中で一台選ぶのが大変なので、 peco を使って接続するノードを選ぶ簡単なスクリプトを作りました。

#!/bin/bash

# fetch Inventory from SSM
INVENTORY=$(aws ssm get-inventory --filters "Key=AWS:InstanceInformation.InstanceStatus,Values=Terminated,Type=NotEqual" --output json | jq -r '.Entities[].Id' )

# select with Tag.Name by peco
EC2=$(aws ec2 describe-instances --instance-ids $INVENTORY --output json \
--query 'Reservations[].Instances[*].{Id:InstanceId,Name:Tags[?Key==`Name`].Value}' | jq -r '.[][0] | (.Id) + "       " + (.Name[0])' | peco)

# parse instance-id
INSTANCE_ID=$(echo ${EC2} | cut -f 1 -d " ")

aws ssm start-session --target ${INSTANCE_ID}

おしまい。

(12/17追記: Terminatedなインスタンスを排除するように修正)

Comments

comments powered by Disqus