「AWSのAPIをカジュアルに」の 24 ページ目に"Unix的な小道具を作る"とあるのですが、これがとても便利そうでした。
何をするのかというと EC2 インスタンスの一覧を取得し、選択したホストに SSH します。
というわけでさっそく Zsh に設定してみました。
事前準備
「IAM Management Console」に登録して API のアクセスキーを発行し、~/.aws/config
に保存しておく。
この時に role をあたえていなくて API にアクセスできていなかったので要注意。
Peco をインストール
Homebrew を使っている場合
$ brew tap peco/peco
$ brew install peco
Go の環境がある場合
$ go get github.com/peco/peco/cmd/peco
ec2list をインストール
$ gem install ec2list
(※) ec2list は memoize しているので毎回リクエストが発生するわけではありません。
$ ec2list
これで一覧が表示されていれば成功です。
default 以外の profile を使用する場合は以後、 s/ec2list/ec2list --profile [profile名]/ で置換してください。
エラーがでる場合は Policy の設定がおかしいか、~/.aws/config
の設定がおかしいかだと思います。
Zsh の設定
$ ec2list | peco | cut -f 3 | xargs -o -n 1 ssh
このコマンドで選択したホストに SSH ができれば成功です。
毎回これを実行するのもめんどくさいので alias か、もしくは keybind を設定しておけば幸せになれるかと思います。
alias
alias peco-ec2ssh="ec2list | peco | cut -f 3 | xargs -o -n 1 ssh"
keybind
function peco-ec2ssh() {
echo "Fetching ec2 host..."
local selected_host=$(ec2list | peco | cut -f 3)
if [ -n "${selected_host}" ]; then
BUFFER="ssh ${selected_host}"
zle accept-line
fi
zle clear-screen
}
zle -N peco-ec2ssh
bindkey '^q' peco-ec2ssh
こうすることによって ^q
を押せば SSH できるようになりました。
便利ですね。
Peco と ec2list の組み合わせでやりましたが、ec2ssh と grep -E '^Host[[:space:]]+[^*]' ~/.ssh/config | peco | awk "{print \$2}" | xargs -o -n 1 ssh
の組み合わせでもいいと思います。
ではでは。