

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# スタックの作成とアプリケーションの実行
<a name="create-custom-stack"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

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

## SimpleJSP アプリケーション
<a name="create-custom-stack-jsp"></a>

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 は、[ウェブアプリケーションのコンテキスト設定ファイル](create-custom-configure.md#create-custom-configure-context)内のデータを使用し、`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` オブジェクトを返します。

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

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

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

`executeQuery` メソッドは、クエリの結果を含む `ResultSet` オブジェクトを返します。SimpleJSP は、返された `ResultSet` オブジェクトからデータベース名を取得し、それらを連結して出力文字列を作成します。最後に、この例では `ResultSet`、`Statement`、および `Connection` の各オブジェクトを閉じます。JSP と JDBC の詳細については、「[JavaServer Pages テクノロジー](http://docs.oracle.com/javaee/5/tutorial/doc/bnagx.html)」と「[JDBC の基本](http://docs.oracle.com/javase/tutorial/jdbc/basics/)」をそれぞれ参照してください。

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

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

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

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

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

   このタスクを実行する方法については、「[Amazon Simple Storage Service の使用開始](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html)」を参照してください。

## スタックの作成
<a name="create-custom-stack-stack"></a>

SimpleJSP を実行するには、次のレイヤーを含んだスタックが必要です。
+ バックエンド MySQL サーバーをサポートする MySQL レイヤー。
+ Tomcat サーバー インスタンスをサポートするために Tomcat クックブックを使用するカスタムレイヤー。

**スタックを作成するには**

1.  OpsWorks スタックダッシュボードで、**スタックの追加**をクリックして新しいスタックを作成し、**詳細 >>** をクリックしてすべてのオプションを表示します。スタックを次のように設定します。
   + **Name** (名前) - ユーザー定義のスタック名です。この例では TomStack を使用します。
   + **[Use custom Chef cookbooks]** (カスタムChefのクックブックを使用) - トグルを **[Yes]** (はい) に設定します。いくつかの追加オプションが表示されます。
   + **Repository type** (リポジトリタイプ) - Git
   + **Repository URL** (リポジトリのURL) - `git://github.com/amazonwebservices/opsworks-example-cookbooks.git` 。
   + **Custom Chef JSON** (カスタム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](create-custom-configure.md#create-custom-configure-context)」で説明するように、JDBC リソース名 (jdbc/mydb) がウェブアプリケーションのコンテキスト名 (ROOT) に割り当てられます。

     この最後の属性にはデフォルト値はありません。カスタム JSON で設定する必要があります。  
![\[Configuration Management interface showing Chef version options and custom JSON input field.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/tom_add_stack.png)

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

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

1. [**Layers**] (レイヤー) ページに戻り、[**\$1 Layer**] (\$1 レイヤー) をクリックしてレイヤーを追加します。[**Layer type**] では [**Custom**] をクリックします。このテンプレートでは、**TomCustom** と **tomcustom** を、それぞれレイヤーの名前と短縮名として使用します。  
![\[Add Layer form with Custom layer type, Name, and Short name fields for creating a customized layer.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/tom_add_custom_layer.png)

1. [**Layers**] (レイヤー) ページで、カスタムレイヤーに対して、[**Recipes**] (レシピ) をクリックし、[**Edit**] (編集) をクリックします。[**Custom Chef Recipes**] で、次のように、Tomcat クックブックのレシピをレイヤーのライフサイクルイベントに割り当てます。
   + [**Setup**] には **tomcat::setup** を入力し、[**\$1**] をクリックします。
   + [**Configure**] には **tomcat::configure** を入力し、[**\$1**] をクリックします。
   + [**Deploy**] には **tomcat::deploy** を入力し、[**\$1**] をクリックします。次に、[**Save**] をクリックします。

     .  
![\[Custom Chef Recipes interface showing setup, configure, and deploy steps with options.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/tom_events.png)

1. ナビゲーションペインで [**Apps**] をクリックし、[**Add an app**] をクリックします。次のオプションを指定し、[**Add App**] をクリックします。
   + **Name** – アプリケーションの名前。この例では SimpleJSP を使用し、 スタックによって生成される短縮名は simplejsp OpsWorks になります。
   + **App type** (アプリケーションタイプ) - このオプションでは **Other** (その他) を設定します。

     OpsWorks スタックは、関連するサーバーインスタンスに標準アプリケーションタイプを自動的にデプロイします。[**App type**] でこれ以外を選択すると、 OpsWorks スタックは単純に Deploy レシピを実行し、このレシピでデプロイを処理することになります。
   + **Document root** (ドキュメントルート) - このオプションを **ROOT** に設定します。

     **Document root** (ドキュメントルート) の値は、コンテキスト名を指定します。
   + **Repository type** (リポジトリタイプ) - このオプションを **[S3 Archive** (S3 アーカイブ)] に設定します。
   + **Repository URL** (リポジトリのURL) - このオプションは、先に作成したアプリケーションの Amazon S3 の URL に設定します。

   その他のオプションについては、デフォルトの設定を使用します。  
![\[Application settings form with fields for name, app type, document root, and source details.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/tom_app.png)

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

1. 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" になります。

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

   ```
   Databases found:
   information_schema
   simplejsp
   test
   ```
**注記**  
スタックに MySQL インスタンスがある場合、 OpsWorks Stacks はアプリごとに、アプリの短縮名で という名前のデータベースを自動的に作成します。