先日書いたPacifista入門がとても好評だったので、またPacifista関連のTipsを書いてみました。
Pacifistaとは?
複数の言語で書ける、とてもシンプルな自動化ツールです。詳細は以下参照。
PacifistaでEC2を起動する
Pacifistaには、仮想マシンを扱うオブジェクトがあり、数行のコードでEC2を起動する事が出来ます。
では早速、EC2を起動して、適当にunameあたりを実行するコードをJavaScriptで書いてみます。
setupEC2.js
//EC2を操作することのできるHostオブジェクトを、web01という名前で取得する。
var host = VirtualMacine.getHost("AWS", "web01");
//runtimeオブジェクトを使って環境変数からAWSのキーを取得する
var accessKey = runtime.getEnv("AWS_ACCESS_KEY_ID");
var secretKey = runtime.getEnv("AWS_SECRET_ACCESS_KEY");
//EC2を起動する為のパラメータを作成してHostオブジェクトにセット。パラメータは & で繋ぐ
var param = "accessKey="+accessKey+"&secretKey="+secretKey
host.setParameters(param);
//EC2への接続情報を持ったオブジェクトを作成。ここでssh鍵も生成される。
var sshAddress = host.create();
//ホストを起動
host.boot();
var remote = Remote.create();
//鍵を使ってEC2にssh接続する
remote.connectWithAuthFile(sshAddress.getHost(), sshAddress.getPort(), "ec2-user",sshAddress.getKeyPath());
//テキトーにコマンド流してみる
remote.call("uname -a");
作成したファイルは例の如く、scriptsディレクトリ以下に配置します。
script名を指定して実行する事も出来ますので、setupEC2.jsを指定して実行してみましょう。
$ bin/pacifista scripts/setupEC2.js
#uname -a
Linux ip-10-238-154-141 3.4.43-43.43.amzn1.x86_64 #1 SMP Mon May 6 18:04:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
はい、ちゃんとuname通りましたね。Management Consoleからも、web01が作成された事が確認出来ました。
そして、前述の通り、数行でEC2を起動することが出来ました。うーん、シンプルですね。
今回はunameしか実行していませんが、同じ流れで、EC2起動+インフラの設定を自動化出来そうですね!
補足
今回作成したScriptでは、setParametersでAWSのキーしかセットしていません。
この場合、作成されたEC2は自動的に以下のように設定されます。
- リージョンはVirginiaとなる
- EC2生成に使用するAMIはami-05355a6cが指定される
- Instance typeはt1.microとなる
- SecurityGroupsはweb01(getHostで指定した名前)_s_Security_Groupが作成/設定される
- 作成されたweb01_s_Security_groupはssh(22/tcp)がsource 0.0.0.0/0で設定される
- Key pairはweb01(getHostで指定した名前)_s_Key_Nameが作成/設定される
上記の項目については、setParametersのオプションで指定可能です。
指定可能なオプションについては、Pacifista公式サイトのHostオブジェクトを参照ください。