年中アイス

いろいろつらつら

rnzoo/ec2sshを作った。

---- 2014/10/19 追記
ec2sshは、rnsshに名称変更して、homebrewでのインストールにも対応しました。


----

前回のエントリでec2listを作りましたが、それを使って、ssh先のec2を絞り込むec2sshを作りました。
reiki4040/rnzoo · GitHub

AWSコンソールでインスタンス情報を確認するのも面倒なので、CLIインスタンス一覧を取得して、そのままssh先を選択できるようにしました。他にも同じようにpecoを使ってssh先を絞り込む例がありますが、キャッシュしたり、ユーザや鍵を変えて実行できるところまでのは見当たらなかったので、nrzooのec2sshが便利にできてます。

インストール

boto, pecoが必要なのでインストールします。ここの詳細は、それぞれのインストール方法を参考にしてください。

boto/boto · GitHub
pip install boto
# bashrcなど
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
peco/peco · GitHub
brew tap peco/peco
brew install peco
nrzoo

nrzooのインストールはgit cloneしてbinにPATHに通します。

git clone git@github.com:reiki4040/rnzoo.git

.bashrcなど

PATH="$PATH:pathto_rnzoo/bin"

botoで設定したACCESS KEYの他に、ec2sshでデフォルトで使うリージョンを環境変数に入れておきます。

export AWS_REGION=ap-northeast-1

使い方

-l,-iはsshのオプションと同じです。

ec2ssh -l ec2-user -i ~/.ssh/key

pecoによるインスタンス絞り込み(文字を入れると絞り込めます)

QUERY>
instance_name1	X.X.X.A
instance_name2	X.X.X.B
instance_name3	X.X.X.C
web server 1	X.X.X.D
web server 2	X.X.X.E

選択するとそのインスタンスに接続します。

user@web server 1 $
インスタンス情報更新

ec2の一覧は、ローカルにキャッシュするので、新しく作ったり、起動したり停止したりした後は、-fオプションをつけて、AWSから再取得します。

ec2ssh -l ec2-user -i ~/.ssh/key -f
sshコマンド確認

-sをつけると、実行予定のsshコマンドを表示します。

ec2ssh -l ec2-user -i ~/.ssh/key -s
# 選択を挟む
ssh -l ec2-user -i ~/.ssh/key X.X.X.X
プライベートIPでつなげる環境ならさらに便利

VPN等でつながっていて、直接プライベートIPで接続可能な場合は、-pオプションと、ssh configが便利です。

Host 10.0.*.*
  User ec2-user
  IdentityFile  ~/.ssh/key
ec2ssh -p

プライベートIPに選択が変わります。

QUERY>
instance_name1	10.0.X.A
instance_name2	10.0.X.B
instance_name3	10.0.X.C
web server 1	10.0.X.D
web server 2	10.0.X.E

今後

今後やって行きたいのは以下あたり。あとは別のec2操作コマンドを作ります。

  • runningインスタンスのみへ絞り込み
  • インスタンス情報のソート表示
  • テストコード
  • ファイルダウンロード用にtar.gzを用意する
  • ec2list,ltsv_filterを分離してPyPIへ登録
  • homebrewで入れられるように

ちなみにrnzooはレンズと読んで、rnは私の名前から、zooは動物園で、いろんなコマンドがあって、レンズみたいに時々あると(人によっては手放せないぐらい)便利になればってことで付けました。名前って難しいなと思います。