pecoを利用してAWSのインスタンスを取得する

June 18, 2014

peco を利用してAWSのEC2に簡単ログイン

zsh、全然調べてなくて30分ぐらいで適当に書いたヤツです。

TL;DR

zsh使っててaws-cli使っていてshellscriptを利用できるなら
aws-cliを利用してnameとpublic dnsを紐付けてpecoで絞り込むだけのもの

設定

  • shellscriptを起きます(get-ec2-list.sh)
#!/bin/bash

instances=$(aws ec2 describe-instances \
    --filters 'Name=instance-state-name,Values=running' \
    --query 'Reservations[].Instances[?PublicDnsName!=`null`].[Tags[*][?Key==`Name`].Value[],PublicDnsName]' \
    --output text)

for item in ${instances[@]}; do
    if [[ `echo $item | grep 'compute.amazonaws.com'` ]]; then
        printf "$item\n"
    else
        printf "$item "
    fi
done
  • zshの設定にこんな感じのものを書きます(zshrc)
function get_ec2_list() {
    local get_list
    get_list="/home/hoge/get-ec2-list.sh"
    BUFFER=$(eval $get_list | peco  | awk '{print $2}')
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N get_ec2_list
bindkey '^v' get_ec2_list

こんな感じのものをつくると

QUERY>
web ec2-192-0-2-1.region.compute.amazonaws.com
db ec2-192-0-2-2.region.compute.amazonaws.com
app1 ec2-192-0-2-3.region.compute.amazonaws.com
app2 ec2-192-0-2-4.region.compute.amazonaws.com

こんな感じでEC2のNameを利用してPublic DNSを絞り込める。
awkを利用して、選択したら
Public Name(ec2-192-0-2-1.region.compute.amazonaws.com の方)だけが選択される。
便利。便利だけど落書きレベルなのでGoで完結できるようにした方が良い。