AWS Elastic Beanstalkの開発環境を構築してみた
発表されてから、1年ちょっとたったAWS Elastic Beanstalkについて調査してみました。
http://www.publickey1.jp/blog/11/amazonjavapaasbeanstalkruby_on_rails.html
Beanstalkは、Javaのアプリケーションがデプロイ可能なPaaSです。
現在もまだベータであり、この記事にあるようにデータベースは、SimpleDBまたはRDSなど外部サービスとの連携が必要です。
Beanstalkにデプロイするアプリケーションの開発には2つの手段があります。
1. Eclipseプラグインを使う
2. 既存のアプリケーションなど独自形式のプロジェクトの場合は、warファイルをManagement Consoleより直接アップロードする方法もあります
Eclipseプラグインを使った場合もプロジェクトの形式は自由に出きるのかもしれないですが設定までは調べていません。
この2つの方法について手順を追ってみました。
Eclipseプラグインによる開発
公式ドキュメントhttp://aws.amazon.com/jp/eclipse/に英語ですが動画があるので、それに沿って作業して行くのが分かりやすいです。
AWS Elastic Beanstalkプロジェクトの作成
Eclipseプラグインを利用してJava Webプロジェクトを作成してデプロイするまでの公式ドキュメントは以下のリンクにあります。
http://aws.amazon.com/articles/4412341514662386
AWSプラグインのメニューから[New AWS Java Web Project...]を選択します。
適当なProject nameを入力して、先ほど作成したAWSアカウントを選択し[Finish]をクリックするとJava Web Applicationのプロジェクトが展開されます。
プロジェクトのデプロイ
サンプルをAWSにデプロイしてみます。
Basic Java Web Applicationを選択して[Next]をクリック、
サーバーのタイプを設定するダイアログが表示されます。
最初のデプロイなので、[Manually define a new server.]を選択します。
[Select the server type:]は、今回、ターゲットアプリはサーブレット2.4なのでTomcat 6を選択
[Server's host name:]と[Server name:]は何を指定するのか分からなかったのでデフォルトのままにして
[Next]
サーバーの実行環境を設定するダイアログが表示されます。
リージョンはまだUS-Eastしか選べません。これはManagement Consoleでも同じでした。
ApplicationとEnvironmentのNameを適当に入れて[Next]
ここで、デプロイの際に使用するsshのキーペアを選択します。
無い場合は[+]をクリックすると以下のダイアログが表示され、新しいキーペアを作成できます。
このページで[Finish]できますが[Next]をクリックすると以下のダイアログが出てきます。
[Finish]をクリックすると再度にバージョンの入力を聞かれます。
[OK]をクリックするとアップロードが始まります。
インスタンスを作成し、プロジェクトがデプロイされ起動するまで、数分かかります。
アプリケーションが起動すると、eclipse内のブラウザにアプリケーションが表示されます。
既存アプリケーションのデプロイ
既存のアプリケーション、などJava Web Applicationの形式に合わないアプリケーションの場合は、Management Consoleからwarファイルを直接アップロードする方が早そうです。
ここでは、Grailsプロジェクトを例に説明してみます。
まず、簡単なscaffoldアプリを作成してみます。
$ grails create-app my-app $ cd my-app $ grails create-domain-class org.example.Book $ vi grails-app/domain/org/example/Book.groovy
package org.example class Book { String title String author static constraints = { title(blank: false) author(blank: false) } }
$ grails generate-all org.example.Book
MySQLの設定
$ grails install-plugin mysql-connectorj $ vi grails-app/conf/DataSource.groovy
RDSインスタンスを作成して設定します。
dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "root" password = "" } ... environments { development { .... } test { .... } production { dataSource { dbCreate = "update" url = "jdbc:mysql://hellobeanstalk.xxxxxxxxx.us-east-1.rds.amazonaws.com:3306/hellobeanstalk" } } }
$ grails war
target以下にできたmy-app-0.1.warをManagement Consoleよりアップロードします。
[Launch New Environment]をクリックします。
[Environment Name]、[Environment URL]はアプリケーションにアクセスするURLになります。
例えば、この場合はURL「http://my-app.elasticbeanstalk.com」でアプリケーションが表示可能になります。
[Version]は[Upload ant use a new application version]を選択して、作成したwarファイルを選択します。
[Container Type]はTomcat 6を選択しました。
[Continue]をクリックすると詳細設定のダイアログが表示されます。
ここはデフォルトのまま[Next]
最後に確認画面[Finish]をクリックするとインスタンスの作成とアプリケーションのデプロイが開始されます。
[Create New Application]もほぼ同じ機能になります。
まとめ
いくつかポイントと実際に運用するまでに調べて置かないとならなそうなことを挙げておきます
- 利用可能なコンテナはTomcat 6、Tomcat 7の32bit、64bit
- データソースの接続プールはMETA-INFのcontext.xmlに記述
- ログの管理
- 独自ドメインはCNAMEで登録
- SSHで直接インスタンスにアクセス可能
- RDSなどデータベースに連携する場合の通信のセキュリティ確保
- それと以下のブログで試されているようになんでもありのようです
http://dev.worksap.co.jp/Members/t_tanaka/2011/01/21/elasticbeanstalk2/