AWSでsshするならyogafireも便利

※便乗記事ですごめんなさい><
http://m.igrs.jp/blog/2013/03/14/ec2-ssh/


yogafireはec2を便利に使うためのコマンドラインツールです。
yogafireの機能はsshだけではありませんが、
sshするだけでも便利なのでチラッと紹介してみます。

インストール

# ※cpanmコマンド無い時
brew install cpanminus

# インストール (ncurses-devel / readline-devel / libxml2-devel パッケージが必要)
cpanm https://github.com/toritori0318/p5-Yogafire/tarball/master

初期設定する

yoga use --init

sshする

# 一覧から選択
yoga ssh

# Nameタグが「www01」のサーバにsshログイン
yoga ssh www01

# Nameタグが「www*」のサーバを一覧表示。ユーザはec2-userでログインする
yoga ssh 'www*' --user=ec2-user

# AWS APIの条件から絞り込んで一覧表示
yoga ssh --filter='availability-zone=ap-northeast-1,group-name=base'

ssh踏み台指定

# タグ名「fumidai」のインスタンスを踏み台にする
yoga ssh --proxy=fumidai

または、.yogaファイルに「proxy」を設定してもOKです。

application1:
  access_key_id: xxxxxxxxxxxxxxxxx
...
  proxy: fumidai
...

インタラクティブに絞り込んでみる

1.普通にyoga sshしたあと、「app」を入力してEnter。
タグ名に「app」を含むインスタンスがフィルタされます。

2.さらに「b」で絞込み。

3.さらに「web」で絞り込むと、最後の一つのインスタンスなので自動でsshが実行されます。


もちろん、途中でNoを指定してsshを実行することも可能です。

リモートコマンド実行

# Nameタグが「www01」のサーバでlsを実行
yoga cmd www01 ls

# Nameタグが「www」で始まるサーバでuptimeを実行
yoga cmd 'www*' 'uptime'

# Nameタグが「db」で始まるサーバでsudo+password実行
yoga cmd 'db*' -s -p '/etc/init.d/redis start'

リモートにファイルを get / put

rsyncでリモートサーバのファイルを取得します。

# Nameタグが「www02」サーバの「/tmp/hoge.log」をローカルの「./」に転送
yoga get www02 /tmp/hoge.log ./

# Nameタグが「www」で始まるサーバ全部に「/tmp/hoge.log」をローカルの「./」に転送
yoga get 'www*' /tmp/hoge.log ./

# ホスト名でも可能
yoga get hogehoge.example.com /tmp/hoge.log ./

# dry-runモード
yoga get www02 /tmp/hoge.log ./ --dry-run

# rsyncオプションを追加(node_modulesディレクトリを除外してsync)
yoga get www02 ./nodapp ./ -o '--exclude=node_modules'

# ローカルの「README」ファイルを、Nameタグが「www03」サーバの「/home/tori243」に送信
yoga put www03 README /home/tori243

yogafireには他にも多数のコマンドが実装されているので
ご興味のある方は他の記事もご参照ください。
http://d.hatena.ne.jp/tori243/20130102/1357142925
http://d.hatena.ne.jp/tori243/20130327/1364392574