Amazon EC2 で複数ホスト一括処理するなら ec2-pssh がとっても便利

前記事の続きです)

複数のホストに対して同時にコマンドを実行するツールはいくつかあるのですが Amazon EC2 向けのものがなさそうだったので作ってみました。

できること

  • とある名前やタグが付いたインスタンスに一括でコマンド発行したり
  • とある Auto Scaling group や ELB に属したインスタンスのログを同時に眺めたり
  • とあるグループのインスタンス内の特定ファイルを一度に収集したり

いろいろ便利なことが簡単に実現できます。

Parallel SSH

まず前提として PSSH: Parallel SSH Tools を利用するので詳しくは pssh について詳しいページを参照のこと。

Mac 環境なら sudo easy_isntall pssh で入ります。

思想としては ec2-ssh と同じく極力シンプルにするため pssh の単純なラッパーコマンドとして実装しており利用方法やパラメータ等は pssh 互換です。 一括処理するグループを指定するためオプションだけを加えてます。

オプション

  • -S / --as : Auto Scaling グループ名を指定
  • -N / --name : インスタンス名を指定(同じ名前のインスタンスが複数ある場合)
  • -T / --tag : タグを指定 (Key=Value)
  • -F / --filter : フィルタを直接指定 see. ec2-describe-instances
  • -L / --elb : ロードバランサー名を指定

使い方

ロードバランサー lb-web 配下に属するサーバ群のアクセスログを同時に眺める

ec2-pssh -L lb-web -P tail -f /var/log/nginx/access.log

Auto Scaling グループ名 as-api に属するサーバ群の負荷状況をリアルタイムで確認

ec2-pssh -S as-api -P vmstat 1

api という名前が付いたサーバのディスク利用率を一度に確認

ec2-pssh -N api -i df -h

等々

他の PSSH コマンド群

Parallel SSH Tools には pssh 以外にもいくつか便利コマンドが用意されているのですが、それらのラッパーも用意しました。

  • ec2-pscp (一括ファイル送信)
  • ec2-pslurp (一括ファイル収集)
  • ec2-prsync (一括ファイル同期)
  • ec2-pnuke (一括プロセス終了 pkill)

一括ファイル送信

ec2-pssh -N api -i df -h

一括ファイル収集

ec2-pssh -N api -i df -h

その他の付属コマンド

  • ec2-ssh (前記事参照)
  • ec2-host (インスタンス名解決)

hoge という名前の付いたインスタンスは誰?

ec2-host hoge

Auto Scaling グループ名 as-api に属する全てのサーバ名を取得

ec2-host -S as-api

ec2-host は他のコマンドとの組み合わせて使うと便利です。

cat ~/.ssh/id_rsa.pub | ssh -i ~/ec2.pem ec2-user@`ec2-host hoge` 'cat >> ~/.ssh/authorized_keys'