Gradle で Amazon EC2 を操作してみる

最近、いろいろと話題の多い Amazon EC2 ですが...
実は 開発用途としても非常に便利に利用できるということに最近気がつきはじめました。
その一つが JAWS-UG Nagoya勉強会 第1回 でも発表させていただいた Jenkins CI の分散ビルド (プレゼン資料は近日公開予定) なのですが、 それ以外にも Amazon EC2 を利用することで、生産効率を改善できることは たくさんあるのではないでしょうか?
Amazon EC2 というと プロダクト環境というイメージを持たれている方も多いと思いますが、折角いい環境が手軽に使えるのですから、 自分たちのためにも利用しないと 勿体ないです。

開発で利用することを考えると、繰り返し実行するような操作は 当然 自動化するべきです。
Amazon EC2 には コマンドラインで操作が可能な Amazon EC2 API Tools が公開されているので、シェルスクリプト等で 簡単に自動化できるのですが、 Gradle と AWS SDK for Java を使えばもっと簡単に自動化することができます。

と言うことで...
早速 Gradle から EC2 インスタンスを起動、停止してみましょう。

アクセスキーの設定

まずは AWS SDK for Java から AWS にアクセスするために必要な
  • アクセスキー ID
  • シークレットアクセスキー
を取得します。
これらは セキュリティ証明書 の アクセスキーから取得できます。

今回は 取得したアクセスキーを $HOME/.aws/AwsCredentials.properties に

accessKey=XXXXXXXXXXXXXXXXXXXXXXX
secretKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
のように設定します。
もちろん $HOME/.aws/AwsCredentials.properties は他人に見られないように ちゃんとパーミッションを設定しておきましょう。

build.gradle の作成

あとは 以下の Gradle スクリプトを用意するだけです。
AWS SDK for JavaMaven リポジトリに公開されていますので、 実行時に 必要なライブラリを全て取得してくれます。
AWS SDK for Java から自分でダウンロードする必要はありません。


EC2 インスタンス 起動

gradle -Pregion=ap-northeast-1 -PinstanceId=i-12345678 start
のように実行すれば 東京リージョンの i-12345678 インスタンスが起動できます。

もちろん、gradle.properties に

region=ap-northeast-1
instanceId=i-12345678
のように指定しておけば
gradle start
だけでインスタンスが起動できます。

EC2 インスタンス 停止

インスタンスを停止する場合は

gradle -Pregion=ap-northeast-1 -PinstanceId=i-12345678 stop
または
gradle stop
を実行するだけです。

AWS SDK for Java には この他にも多くの API が含まれています。
もちろん build.gradle 内には Groovy スクリプトが書けるので、それらの API を自由に使うことができます。
更に、前回の Gradle で SSH してみる を組み合わせれば、 もっと面白いことができるのではないでしょうか。