この記事はAWSシニアエバンジェリスト Jeff BarrのAmazon Web Services Blogの記事、AWS OpsWorks for Javaを片山 暁雄@c9katayamaが翻訳したものです。
Chris Barclayが、新しいAWS OpsWorks for Javaのアナウンスに関して、素晴らしいゲスト記事を書いてくれました!
-- Jeff;
AWS OpsWorksがJavaアプリケーションのサポートを開始致しました。AWS OpsWorksはアプリケーションの管理サービスであり、お客様のアプリケーション全体を容易にモデル化したり管理したりすることが出来ます。一般的なテクノロジーを用いたテンプレートを使用して開始したり、ご自身のChefレシピを用いて、各コンポーネントの全自動配備、スケーリング、モニタリングや自動化を構築する事ができます。
この新しいOpsWorksのJavaレイヤーは、お客様のJavaアプリケーションを動作させるために、適切な設定が行なわれたAmazon EC2と、Apache Tomcatを準備します。1つもしくは複数のJavaアプリケーション、例えばフロンドエンドのWebサーバとバックエンドのビジネスロジックを、同じサーバにデプロイする事ができます。またJavaレイヤーは、カスタマイズしたり拡張することができます。例えば、異なるバージョンのTomcatを選択したり、ヒープサイズを変更したり、異なるJDKを利用したりできます。
利用を開始するには、OpsWorksのコンソールを開き、スタックを作成します。次に、Javaレイヤーを追加します。ナビゲーションコラム内の"Instances"をクリックし、インスタンスを追加して、スタートさせます。

Tomcatは、HTML、Java server pages (JSP)やJavaクラスファイルをサポートします。以下の例では、日付とAmazon EC2インスタンスのIPアドレスを出力するだけの単純なJSPのデプロイ、ロードバランサを用いた環境のスケール、およびOpsWorksがその他のタスクをどのように自動化するかについて説明します。
<%@ page import="java.net.InetAddress"%><html><body><%
java.util.Date date =new java.util.Date();
InetAddress inetAddress = InetAddress.getLocalHost();%>
The time is<%
out.println( date );
out.println("<br>Your server's hostname is "+inetAddress.getHostName());%><br></body></html>
典型的なJava開発プロセスは、ローカル環境での実装やテスト、ソースコードのリポジトリへのチェックイン、ビルド成果物のサーバへのデプロイなどを行ないます。この例では1つのJSPファイルしか使用しませんが、通常のアプリケーションであれば複数のファイルを使用するでしょう。この場合は、関係するファイルのアーカイブを作成して、そのアーカイブをOpsWorksに指定してデプロイを行ないます。
それでは、JSPのアーカイブを作成して、OpsWorksがアクセス可能な場所にこのアーカイブをアップロードしましょう。このアーカイブは1つのファイルだけですが、任意の数のファイルに対して、同様の手順を用いる事ができます。
- simplejsp.jspと名付けたファイルにサンプルコートをコピーし、simplejspと名付けたディレクトリを作成し、その中にファイルを配置します。
- simplejspディレクトリの、.zipアーカイブを作成します。
- 一般公開されたAmazon S3バケットを作成し、simplejsp.zipをこのバケットにアップロードし、ファイルを一般公開用に設定します。この作業の詳細な手順については、こちらのGet Started With Amazon Simple Storage Serviceをご覧下さい。
ナビゲーションカラム内のAppsをクリックし、次にAdd an appをクリックします。
- Settings内のNameに名前を定義し、App TypeにJavaを指定します。
- Application Source内のrepository typeにhttp archiveを指定し、S3にアップロードしたアーカイブのURLを入力します。このURLは、http://s3.amazonaws.com/your-bucket/simplejsp.zip のような形となるはずです。
そしてAdd Appをクリックします。

次に、Deployをクリックして、インスタンスにアプリケーションをデプロイします。OpsWorksは、Javaアプリケーションサーバの特定の場所に、S3からファイルをダウンロードします。デプロイが完了したあとに、Instancesページをクリックして、次のようなURL(http://publicIP/appShortName/appname.jsp)を作成するために、パブリックIPアドレスをコピーします。

例えば、このURLはhttp://54.205.11.166/myjavaapp/simplejsp.jspのような形となり、このURLにアクセスすると、このような内容が表示されるでしょう:
Wed Oct 30 21:06:07
UTC 2013
Your server’s hostname is java-app1
1つのインスタンスが起動している場合、処理のスパイクを捌くために、時間と負荷ベースのインスタンススケーリングを利用してアプリケーションをスケールする事ができます。左側メニューのInstancesしたのTime-basedをクリックして、インスタンスを追加します。そしてこのインスタンスを起動と停止をする時間を選択することができます。複数のインスタンスを持っている場合、おそらくトラフィックをこれらのインスタンスにロードバランスしたいでしょう。この場合は、 Amazon EC2コンソールでElastic Load Balancerを1台作成して、OpsWorksのレイヤーに追加します。OpsWorksはインスタンスの停止または起動に伴い、自動的にロードバランサーの設定を更新します。
EC2インスタンスの設定を変更するために、OpsWorksをカスタマイズするのは簡単です。ほとんどの設定項目、例えばソフトウェアパッケージを追加したり、Amazon EBSボリュームを追加したりするような設定は、レイヤーの設定から直接設定出来ます。BashやChefレシピを用いて、ソフトウェアのインストール方法を変更できます。また既存のレシピの属性値を変更することもできます。例えば、スタックのカスタムJSONを変更することで、異なるJDKを利用する事ができます::
{"opsworks_java": {"jvm_pkg": {"use_custom_pkg_location":"true","custom_pkg_location_url_rhel":"http://s3.amazonaws.com/your-bucket/jre-7u45-linux-x64.gz"
}
}
}
AWSマネジメントコンソールで数クリックするだけで、OpsWorksを開始することができます。Javaレイヤーの利用や、OpsWorksのカスタマイズについてのより詳細な情報については、こちらのドキュメントをご確認ください。
-- Chris Barclay, Senior Product Manager
この記事はAWSシニアエバンジェリスト Jeff BarrのAmazon Web Services Blogの記事、AWS OpsWorks for Javaを片山 暁雄@c9katayamaが翻訳したものです。