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インスタンスを起動するので柔軟だがそれなりにコストがかかる。
簡単にサーバ構築とデプロイができ、そして課金されてしまう!おそろしい世の中です。