AWS OpsWorks
ユーザーガイド (API バージョン 2013-02-18)

スタックの作成とアプリケーションの実行

このセクションでは、 Tomcat クックブックを使用して、SimpleJSP という名前のシンプルな Java サーバー ページ (JSP) アプリケーションを実行する基本的なスタック設定を実装する方法について説明します。スタックは、TomCustom という名前の Tomcat ベースのカスタム Layer と MySQL Layer で構成されます。SimpleJSP は、TomCustom にデプロイされ、MySQL データベースの一部の情報を表示します。AWS OpsWorks スタックの使用方法の基本にまだなじみがない場合は、まず「Chef 11 Linux スタックの使用開始」をお読みください。

SimpleJSP アプリケーション

SimpleJSP アプリケーションは、データベース接続のセットアップ方法、およびスタックの MySQL データベースからデータを取得する方法の基本を示します。

<html> <head> <title>DB Access</title> </head> <body> <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %> <% StringBuffer output = new StringBuffer(); DataSource ds = null; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Context initCtx = new InitialContext(); ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb"); con = ds.getConnection(); output.append("Databases found:<br>"); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while (rs.next()) { output.append(rs.getString(1)); output.append("<br>"); } } catch (Exception e) { output.append("Exception: "); output.append(e.getMessage()); output.append("<br>"); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } catch (Exception e) { output.append("Exception (during close of connection): "); output.append(e.getMessage()); output.append("<br>"); } } %> <%= output.toString() %> </body> </html>

SimpleJSP は、DataSource オブジェクトを使用して MySQL データベースと通信します。Tomcat は、ウェブアプリケーションのコンテキスト設定ファイル内のデータを使用し、DataSource オブジェクトを作成して初期化し、論理名に結合します。次に、Java Naming and Directory Interface (JNDI) ネーミングサービスで論理名を登録します。適切な DataSource オブジェクトのインスタンスを取得するには、InitialContext オブジェクトを 作成し、リソースの論理名をオブジェクトの lookup メソッドに渡します。これにより、適切なオブジェクトを取得します。SimpleJSP の例の論理名 java:comp/env/jdbc/mydb には、次のコンポーネントがあります。

  • ルート名前空間の java。名前の残りの部分とはコロン (:) で区切られます。

  • 任意の追加の名前空間。スラッシュ (/) で区切られます。

    Tomcat は、comp/env 名前空間にリソースを自動的に追加します。

  • リソース名。ウェブアプリケーションのコンテキスト設定ファイルで定義され、名前空間とはスラッシュで区切られます。

    この例では、リソース名は jdbc/mydb です。

データベースへの接続を確立するために、SimpleJSP は次の処理を実行します。

  1. DataSource オブジェクトの getConnection メソッドを呼び出し、Connection オブジェクトを返します。

  2. Connection オブジェクトの createStatement メソッドを呼び出し、データベースとの通信に使用する Statement オブジェクトを作成します。

  3. 適切な Statement メソッドを呼び出すことで、データベースと通信します。

    SimpleJSP は、executeQuery を呼び出し、サーバーのデータベースをリスト表示する SHOW DATABASES クエリを実行します。

executeQuery メソッドは、クエリの結果を含む ResultSet オブジェクトを返します。SimpleJSP は、返された ResultSet オブジェクトからデータベース名を取得し、それらを連結して出力文字列を作成します。最後に、この例では ResultSetStatement、および Connection の各オブジェクトを閉じます。JSP と JDBC の詳細については、「JavaServer Pages テクノロジー」と「JDBC の基本」をそれぞれ参照してください。

スタックで SimpleJSP を使用するには、SimpleJSP をリポジトリに配置する必要があります。サポートされている任意のリポジトリを使用できますが、この後のセクションで説明する例のスタックで SimpleJSP を使用するには、SimpleJSP をパブリックの S3 アーカイブに配置する必要があります。その他の標準のリポジトリの使用方法の詳細については、「クックブックリポジトリ」を参照してください。

SimpleJSP を S3 アーカイブ リポジトリに配置するには

  1. コード例を simplejsp.jsp という名前のファイルにコピーし、そのファイルを simplejsp という名前のディレクトリに配置します。

  2. .zip ディレクトリの simplejsp アーカイブを作成します。

  3. パブリックの Amazon S3 バケットを作成し、simplejsp.zip をそのバケットにアップロードして、ファイルをパブリックにします。

    このタスクを実行する方法については、「Amazon Simple Storage Service の使用開始」を参照してください。

スタックの作成

SimpleJSP を実行するには、次の Layer を含んだスタックが必要です。

  • バックエンド MySQL サーバーをサポートする MySQL Layer。

  • Tomcat サーバー インスタンスをサポートするために Tomcat クックブックを使用するカスタム Layer。

スタックを作成するには

  1. AWS OpsWorks スタックダッシュボードで、[Add Stack] をクリックして新しいスタックを作成し、[Advanced >>] をクリックしてすべてのオプションを表示します。スタックを次のように設定します。

    • [Name] – ユーザー定義のスタック名です。この例では TomStack を使用します。

    • [Use custom Chef cookbooks] – 切り替えを [Yes] に設定します。いくつかの追加オプションが表示されます。

    • [Repository type] – Git。

    • [Repository URL] – git://github.com/amazonwebservices/opsworks-example-cookbooks.git

    • [Custom Chef JSON] – 次の JSON を追加します。

      { "tomcat": { "base_version": 7, "java_opts": "-Djava.awt.headless=true -Xmx256m" }, "datasources": { "ROOT": "jdbc/mydb" } }

    残りのオプションについては、デフォルトをそのまま使用できます。

    カスタム JSON は、次の処理を実行します。

    • Tomcat クックブックの ['base_version'] 属性を上書きして Tomcat のバージョンを 7 に設定します。デフォルト値は 6 です。

    • Tomcat クックブックの ['java_opts'] 属性を上書きし、インスタンスがヘッドレスであることを指定して JVM の最大ヒープサイズを 256 MB に設定します。デフォルト値では、Amazon Linux を実行しているインスタンスに対してはオプションが設定されません。

    • ['datasources] 属性値を指定します。これにより、「tomcat::context」で説明するように、JDBC リソース名 (jdbc/mydb) がウェブアプリケーションのコンテキスト名 (ROOT) に割り当てられます。

      この最後の属性にはデフォルト値はありません。カスタム JSON で設定する必要があります。

  2. [Add a layer] をクリックします。[Layer type] では [MySQL] を選択します。次に、[Add Layer] をクリックします。

  3. ナビゲーションペインで [Instances] をクリックし、[Add an instance] をクリックします。[Add Instance] をクリックして、デフォルトの値をそのまま使用します。インスタンスに関する行で、[start] をクリックします。

  4. [Layers] ページに戻り、[+ Layer] をクリックして Layer を追加します。[Layer type] では [Custom] をクリックします。このテンプレートでは、TomCustomtomcustom を、それぞれ Layer の名前と短縮名として使用します。

  5. [Layers] ページで、カスタム Layer に対して、[Recipes] をクリックし、[Edit] をクリックします。[Custom Chef Recipes] で、次のように、Tomcat クックブックのレシピを Layer のライフサイクルイベントに割り当てます。

    • [Setup] には tomcat::setup を入力し、[+] をクリックします。

    • [Configure] には tomcat::configure を入力し、[+] をクリックします。

    • [Deploy] には tomcat::deploy を入力し、[+] をクリックします。次に、[Save] をクリックします。

      .

  6. ナビゲーションペインで [Apps] をクリックし、[Add an app] をクリックします。次のオプションを指定し、[Add App] をクリックします。

    • [Name] – アプリケーションの名前。この例では SimpleJSP を使用し、AWS OpsWorks スタックで生成される短縮名は simplejsp になります。

    • [App type] – このオプションでは [Other] を選択します。

      AWS OpsWorks スタックは、標準的なアプリケーションタイプを、関連付けられたサーバーインスタンスに自動的にデプロイします。[App type] でこれ以外を選択すると、AWS OpsWorks スタックは単純に Deploy レシピを実行し、このレシピでデプロイを処理することになります。

    • [Document root] – このオプションは ROOT に設定します。

      [Document root] の値は、コンテキスト名を指定します。

    • Repository type – このオプションを [S3 Archive] に設定します。

    • [Repository URL] – このオプションは、先に作成したアプリケーションの Amazon S3 の URL に設定します。

    その他のオプションについては、デフォルトの設定を使用します。

  7. [Instances] ページを使用し、インスタンスを TomCustom Layer に追加して起動します。Setup レシピの完了後、AWS OpsWorks スタックは新しいインスタンスで Deploy レシピを自動的に実行するため、インスタンスの起動によって SimpleJSP もデプロイされます。

  8. TomCustom インスタンスがオンラインになったら、[Instances] ページでそのインスタンス名をクリックして詳細を確認します。パブリック IP アドレスをコピーします。http://publicIP/tc/appname.jsp のように URL を作成します。たとえば、この URL は http://50.218.191.172/tc/simplejsp.jsp のようになります。

    注記

    リクエストを Tomcat に転送する Apache の URL は、デフォルトの ['tomcat']['apache_tomcat_bind_path'] 属性である /tc/ に設定されます。SimpleJSP ドキュメントのルートは、ROOT に設定されます。これは、/ に解決される特殊な値です。したがって URL は ".../tc/simplejsp.jsp" になります。

  9. 前のステップの URL をブラウザに貼り付けます。次のように表示されます。

    Databases found: information_schema simplejsp test

    注記

    スタックに MySQL インスタンスがある場合、AWS OpsWorks スタックは、各アプリケーションに対して、そのアプリケーションの短縮名を名前とするデータベースを自動的に作成します。