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/に英語ですが動画があるので、それに沿って作業して行くのが分かりやすいです。

Eclipseプラグインのインストール

Beanstalkの開発環境はAWS SDKEclipseプラグインの1機能として用意されています。

Eclipseのメニュー[Help > Install new software]からInstallダイアログを開き、以下のURLを入力するとプラグインが表示されます。

http://aws.amazon.com/eclipse/

EclipseJavaEE版をおすすめしてあります。
私の環境のJava Classicではインストールに失敗したので、JavaEE版を用意するのが無難そうです。

AWSアカウントをプラグインに設定

プラグインのインストール後、AWSプラグンメニューの[Preferences]を開き、AWSアカウントの情報を入力します。

プラグインのアイコンをクリッックするとOverviewが表示されます。
現在の物は、ムービーで表示されているOverviewとは異なっていますね。

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内のブラウザにアプリケーションが表示されます。

Management Consoleでも、作成したEnvironmentとWebアプリケーションを確認できます。

既存アプリケーションのデプロイ

既存のアプリケーション、など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]もほぼ同じ機能になります。

参考: https://malderhout.wordpress.com/2011/02/18/deploy-grails-apps-in-3-simple-steps-to-amazon-beanstalk/

まとめ

いくつかポイントと実際に運用するまでに調べて置かないとならなそうなことを挙げておきます

  • 利用可能なコンテナは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/