CloudToolsプラグインでAmazon EC2
新しめのGrailsでCloudToolsプラグインを使ってAmazon EC2にデプロイをしてみた。
Cloud Toolsって何?
SpringSource Cloud Foundryの元になっているツールです。CloudToolsには、MavenプラグインとGrailsプラグインがあるのです。
http://code.google.com/p/cloudtools/
http://www.cloudfoundry.com/cloudtools.html
Mavenプラグインを使うと mvn cloudtools:deploy を実行するだけで、
指定した数のAmazon EC2インスタンスを起動。
MySQLのマスタDBを設定。
MySQLのスレーブを設定。
WebアプリケーションをEC2にアップロード。
1つまたは複数のTomcatを定義してWebアプリケーションをデプロイ。
ロードバランス用のApacheを定義して起動。
などなど、他にもいろいろできます。 もちろん、Grailsプラグインでも同じ事ができます。(一部除く)
grails prod cloud-tools-deploy
grails-1.2.1 + cloud-tools-0.6 => ダメ!
grails-1.1.1 + cloud-tools-0.6 => これもダメなの! 但し何故か一回だけOKだった。
公式!?のリポジトリにある最新版は実際には0.7でec2deployer-1.2-SNAPSHOT.jar
ちなみにcloud-tools-0.7+grails-1.1.1は試してない。
気合いいれて、動くように修正しようと、リポジトリからcheckout。
少しずつ問題が見えてくる。
grails-1.2.1での問題点はXmlParser系がおかしい。
これは、groovy-1.6.7での問題。
(情報ソース多分=>
http://jira.codehaus.org/browse/GRAILS-5670
http://jira.codehaus.org/browse/GROOVY-4010 )
ここは、ExpandoMetaClassでと、強引な修正を試みたがキリがない・・・。最初はサクサク進んだが後半になると実際のサーバが起動してしまうのにエラーで止まるため、無駄なコストかかるのでやめ(サーバ起動する度にお金かかるね)
いろいろあきらめてgrails-1.2.2を待つことに・・・。いいや!それならばGrails-1.3.0.SNAPSHOT!
grails 1.3.0.SNAPSHOTで試す。
1st try そのまま動かす!ダメ!
2nd try スクリプト修正しいて動かす!NO!
プラグイン関連に仕様変更に気付く。
setDefaultTarget('default')
デフォルトターゲット
スクリプトにこれ書いてないとGrailsのスクリプトは何も動かずとまる。
追記して
3rd TRY 動きましたとさ。
ぁぁ、ちなみに、修正した内容の一部。
cloud-tools-0.6 => pluginHome = new File("./plugins").listFiles().find { it.name.startsWith('cloud-tools-')}
0.6は1.0.x用なのでこれでも動いたっぽい。
cloud-tools-0.7 => pluginHome = new File( grailsSettings.projectPluginsDir.path ).listFiles().find { it.name.startsWith('cloud-tools-') }
0.7から1.1.x系用に修正されて、上記のようになった。
これでも動くのだが。pluginHomeを探すときは、1.0.x系からずっと以下のように書いてます。
pluginHome = cloudToolsPluginDir
プラグイン名を最初が小文字のキャメルケースでサフィックスにPluginDir。この仕様もいつまで存在するかわかりませんが自分はこれを採用しています。
今回の内容のパッチとか、Grails Cloud Toolsプラグインの使い方はまた今度書きます。(使ってるGrails自体がSNAPSHOTだし・・。)
Grails-1.0.X系であれば公式なドキュメントの内容で動作するはずです。
Google Code Archive - Long-term storage for Google Code Project Hosting.