Cloudtoolsを使ってEC2インスタンスを起動してwarをデプロイする.Maven編
Cloudtoolsを使ってEC2インスタンスを起動してwarをデプロイする。
今回は、CloudtoolsのMavenプラグインでWebアプリケーションをEC2にデプロイする方法です。
Cloudtoolsとは、前のポストでも説明していますが。
CloudToolsプラグインでAmazon EC2 - leftovers...
Chris Richardson氏(POJOs in Actionの著者さん)が開発した、
EC2にJEEアプリケーションを簡単にデプロイするためのGroovyベースのフレームワークEC2Deploy使用したツール群です。現在MavenプラグインとGrailsプラグインがあります。AMIはCloudtools専用?のものが用意されています。
http://code.google.com/p/cloudtools
http://www.cloudfoundry.com/cloudtools.html
準備するもの
- 適当なディレクトリとその中にpom.xml
- どれだけ使っても自己責任なAWSのアカウント(実行すると課金されます!)
- AWSアカウントの設定などをしたプロパティファイル。aws.properties
- デプロイしたいwarを準備
- もちろんMavenがインストールされていること。
では開始!
デプロイしたいwarをS3にアップロード
S3にフォルダというかバケットを作成してその中にアップロード
aws.propertiesの設定
imageId.m1.small、imageId.m1.large、imageId.m1.xlargeは以下と同じように設定。
accountId、accessKey、secretKey、keyName、keyPairFile、sshDirを設定
imageId.m1.small=ami-6f2cc906 imageId.m1.large=ami-0129cc68 imageId.m1.xlarge=ami-0129cc68 accountId=0000-0000-0000な感じのAWSのID accessKey=あなたのアクセスキー secretKey=あなたのシークレットキー keyName=キー名称キーペアの名前 keyPairFile=/Path/to/your/mykeypair.pem キーペアファイルへのパス sshDir=/usr/bin sshのあるディレクト
pom.xmlの設定
<project> <modelVersion>4.0.0</modelVersion>
<groupId>ec2deploy</groupId>
<artifactId>standalone-deployment</artifactId>
<version>1.0</version>
<repositories>
<repository>
<id>pia-repository</id>
<url>http://www.pojosinaction.com/repository</url>;
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>pia-repository</id>
<url>http://www.pojosinaction.com/repository</url>;
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<properties>
<aws.properties>ここにaws.propertiesのパスを入れる</aws.properties>
<s3.war>s3://保存先バケット名/myapp.war</s3.war>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.chrisrichardson</groupId>
<artifactId>cloudtools-maven-plugin</artifactId>
<configuration>
<awsPropertiesFile>${aws.properties}</awsPropertiesFile>
<schemaName>myschema</schemaName>
<schemaUsers>
<param>user1:user1</param>
</schemaUsers>
<warDirectory>${s3.war}</warDirectory>
<!-- warの名前 -->
<warName>myapp</warName>
<numberOfMySqlSlaves>0</numberOfMySqlSlaves>
<numberOfTomcats>1</numberOfTomcats>
<topology>SingleInstanceTopology</topology>
<catalinaOptsBuilder>
<![CDATA[
{builder, databasePrivateDnsName, slaves ->
builder.arg("-server")
builder.arg("-Xmx1000m")
builder.arg("-Xms1000m")
builder.prop("jdbc.db.server", databasePrivateDnsName)
}
]]>
</catalinaOptsBuilder>
</configuration>
</plugin>
</plugins>
</build>
</project>
ここまで設定がおわったら後は、コマンド実行
mvn cloudtools:deploy
インスタンスが起動します。もちろん時間かかります。そして課金が始まります。
起動が終了したら。ブラウザで動作確認。サーバアドレスはcloudtools:describeで情報をみるかAWSの管理コンソールで確認しましょう!
mvn cloudtools:describe
インスタンス停止方法
mvn cloudtools:stop
Maven Goalは、
http://code.google.com/p/cloudtools/wiki/UsingTheCloudToolsMavenPlugin
- cloudtools:deploy - デプロイ
- cloudtools:stop - 停止
- cloudtools:redeploy - 再デプロイ
- cloudtools:jmeter - jmeterロードテスト
- cloudtools:dbsave - cloudtools.s3.pathに定義したS3のパスにDBスナップショットを保存
- cloudtools:dbrestore - cloudtools.s3.pathに定義したS3のパスからDBスナップショットをDBに例ストア
- cloudtools:clone - cloudtools.new.cluster.nameに定義した内容でクラスタをコピー
- cloudtools:describe - 情報を見る
- cloudtools:list - 使用可能なクラスタリスト表示
EBS(Elastic Block Store)対応
http://code.google.com/p/cloudtools/wiki/UsingEBS
cloudtools:deployで新規デプロイの際に以下のオプション新規EBSも一緒に作成。
以下の例では、デバイス(cloudtools.ebs.device)が/dev/sdj で、サイズ(cloudtools.ebs.volume.size)10GB。
-Dcloudtools.ebs.device=/dev/sdj -Dcloudtools.ebs.volume.size=10
起動中EC2インスタンスのMySQLデータを新規のEBSを作成して移動する事もできます。
以下の例だと2GBのEBSを新規に作成。
mvn cloudtools:enableebs -Dcloudtools.ebs.device=/dev/sdh -Dcloudtools.ebs.volume.size=2
トポロジー
pom.xmlの途中に設定できます。現在は2個だけっぽい。
<topology>SingleInstanceTopology</topology>
SingleInstanceTopology
シングルインスタンス上に、Apache,Tomcat,MySQLマスターを起動。0個以上のMySQLスレーブも同じインスタンスに起動可能。シングルTomcatインスタンス限定の一番安価な方法。
MultipleInstancesTopology
Apache,Tomcat,MySQLマスターMySQLスレーブをそれぞれのEC2インスタンスで起動。複数のEC2インスタンスを起動するので柔軟だがそれなりにコストがかかる。
簡単にサーバ構築とデプロイができ、そして課金されてしまう!おそろしい世の中です。