

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

# Elastic Beanstalk への Java アプリケーションのデプロイ
<a name="create_deploy_Java"></a>

この章では、Java アプリケーションを設定してデプロイする手順について説明します AWS Elastic Beanstalk。Elastic Beanstalk を使用すると、Amazon Web Services を使用して簡単に Java ウェブアプリケーションのデプロイ、管理、スケーリングができます。

Elastic Beanstalk コマンドラインインターフェイス (EB CLI) または Elastic Beanstalk コンソールを使用すると、わずか数分でアプリケーションをデプロイできます。Elastic Beanstalk アプリケーションをデプロイした後も、EB CLI を使用してアプリケーションと環境を管理することも、Elastic Beanstalk コンソール AWS CLI、または APIs を使用することもできます。

EB CLI を使用して *Hello World* Java ウェブアプリケーションを作成してデプロイするには、「[Java の QuickStart](java-quickstart.md)」のステップバイステップの手順に従います。EB CLI を使用して Tomcat ベースのプラットフォームにデプロイするシンプルな「Hello World」Java JSP アプリケーションを作成するステップバイステップの手順に関心がある場合は、「[Tomcat での Java の QuickStart](tomcat-quickstart.md)」を試してください。

**Java プラットフォームブランチ**  
AWS Elastic Beanstalk は、Java アプリケーション用の 2 つのプラットフォームをサポートしています。
+ **Tomcat** – Java サーブレットや JavaServer Pages (JSP) を使用して HTTP リクエストを処理するアプリケーション用のオープンソースのウェブコンテナである *Apache Tomcat* に基づくプラットフォーム。Tomcat は、マルチスレッド、宣言セキュリティの設定、および広範なカスタマイズを提供することにより、ウェブアプリケーション開発を容易にします。Elastic Beanstalk では、Tomcat の現在のメジャーバージョンごとにプラットフォームブランチが用意されています。詳細については、「[Tomcat プラットフォーム](java-tomcat-platform.md)」を参照してください。
+ **Java SE** – ウェブコンテナを使用しないアプリケーションや、Jetty または GlassFish など Tomcat 以外を使用するアプリケーション用のプラットフォーム。アプリケーションで使用するライブラリの Java Archive (JAR) は、Elastic Beanstalk にデプロイするソースバンドルに含めることができます。詳細については、「[Java SE プラットフォーム](java-se-platform.md)」を参照してください。

Tomcat と Java SE プラットフォームの両方の最新ブランチは Amazon Linux 2 以降に基づいており、Java SE AWS ディストリビューションである *Corretto* を使用します。これらのプラットフォームブランチの名前には、Java ではなく Corretto という単語が含まれています。

現在のプラットフォームバージョンのリストについては、「*AWS Elastic Beanstalk プラットフォーム*ガイド」の「[Tomcat](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java)」および「[Java SE](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.javase)」を参照してください。

**AWS ツール**  
AWS には、Java および Elastic Beanstalk を操作するためのいくつかのツールが用意されています。選択したプラットフォームブランチに関係なく、[AWS SDK for Java ](java-development-environment.md#java-development-environment-sdk)を使用して、Java アプリケーション内から他の AWS のサービスを使用できます。 AWS SDK for Java は、raw HTTP 呼び出しをゼロから記述することなく、アプリケーションコードから AWS APIs を使用できるようにするライブラリのセットです。

コマンドラインからアプリケーションを管理することを選択する場合は、[Elastic Beanstalk コマンドラインインターフェイス](eb-cli3.md) (EB CLI) をインストールし、これを使用して Elastic Beanstalk 環境を作成、モニタリング、管理します。アプリケーションの複数の環境を実行すると、EB CLI が Git と統合され、各環境と様々な Git ブランチを関連付けられるようになります。

**Topics**
+ [

# QuickStart: Elastic Beanstalk に Java アプリケーションをデプロイする
](java-quickstart.md)
+ [

# QuickStart: Elastic Beanstalk に Tomcat 用の Java JSP ウェブアプリケーションをデプロイする
](tomcat-quickstart.md)
+ [

# Java 開発環境をセットアップする
](java-development-environment.md)
+ [

# Java のその他の Elastic Beanstalk アプリケーションの例とチュートリアル
](java-getstarted.md)
+ [

# Elastic Beanstalk Tomcat プラットフォームを使用する
](java-tomcat-platform.md)
+ [

# Elastic Beanstalk Java SE プラットフォームの使用
](java-se-platform.md)
+ [

# Amazon RDS DB インスタンスを Java Elastic Beanstalk 環境に追加する
](java-rds.md)
+ [

# Java ツールとリソース
](create_deploy_Java.resources.md)

# QuickStart: Elastic Beanstalk に Java アプリケーションをデプロイする
<a name="java-quickstart"></a>

この QuickStart チュートリアルでは、Java アプリケーションを作成し、 AWS Elastic Beanstalk 環境にデプロイするプロセスについて説明します。

**本番稼働用ではない**  
例はデモンストレーションのみを目的としています。サンプルアプリケーションを本番環境で使用しないでください。

**Topics**
+ [

## AWS アカウント
](#java-quickstart-aws-account)
+ [

## 前提条件
](#java-quickstart-prereq)
+ [

## ステップ 1: Java アプリケーションを作成する
](#java-quickstart-create-app)
+ [

## ステップ 2: アプリケーションをローカルに実行する
](#java-quickstart-run-local)
+ [

## ステップ 3: EB CLI を使用して Java アプリケーションをデプロイする
](#java-quickstart-deploy)
+ [

## ステップ 4: Elastic Beanstalk でアプリケーションを実行する
](#java-quickstart-run-eb-ap)
+ [

## ステップ 5：クリーンアップ
](#java-tutorial-cleanup)
+ [

## AWS アプリケーションの リソース
](#java-quickstart-eb-resources)
+ [

## 次の手順
](#java-quickstart-next-steps)
+ [

## Elastic Beanstalk コンソールでデプロイする
](#java-quickstart-console)

## AWS アカウント
<a name="java-quickstart-aws-account"></a>

まだ AWS のお客様でない場合は、 AWS アカウントを作成する必要があります。サインアップすると、Elastic Beanstalk やその他の必要な AWS サービスにアクセスできます。

 AWS アカウントをすでにお持ちの場合は、「」に進むことができます[前提条件](#java-quickstart-prereq)。

### AWS アカウントを作成する
<a name="java-quickstart-aws-account-procedure"></a>

#### にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

#### 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、*AWS IAM アイデンティティセンター 「 ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。

## 前提条件
<a name="java-quickstart-prereq"></a>

このガイドの手順に従うには、run commands のためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 (\$1) と現在のディレクトリの名前が前に付けられて、リストに示されます。

```
~/eb-project$ this is a command
this is output
```

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

### EB CLI
<a name="java-quickstart-prereq.ebcli"></a>

このチュートリアルでは、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) を使用します。EB CLI をインストールおよび設定する手順の詳細については、「[セットアップスクリプトを使用して EB CLI をインストールする (推奨)](eb-cli3.md#eb-cli3-install)」および「[EB CLI の設定](eb-cli3-configuration.md)」を参照してください。

### Java と Maven
<a name="java-quickstart-prereq.runtime"></a>

ローカルマシンに Amazon Corretto がインストールされていない場合は、「*Amazon Corretto ユーザーガイド*」の「[インストール手順](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/amazon-linux-install.html)」に従ってインストールできます。

次のコマンドを実行して、Java のインストールを確認します。

```
~$ java -version 
```

このチュートリアルでは、Maven を使用します。Apache Maven Project ウェブサイトの[ダウンロード](https://maven.apache.org/download.cgi)と[インストール](https://maven.apache.org/install.html)の手順に従います。Maven の詳細については、Apache Maven Project ウェブサイトの「[Maven ユーザーセンター](https://maven.apache.org/users/index.html)」を参照してください。

次のコマンドを実行して、Maven のインストールを確認します。

```
~$ mvn -v
```

## ステップ 1: Java アプリケーションを作成する
<a name="java-quickstart-create-app"></a>

プロジェクトディレクトリを作成します。

```
~$ mkdir eb-java
~$ cd eb-java
```

次に、Elastic Beanstalk を使用してデプロイするアプリケーションを作成します。ここでは、"Hello World" という RESTful ウェブサービスを作成します。

この例では、[Spring Boot](https://spring.io/projects/spring-boot) フレームワークを使用します。このアプリケーションは、ポート 5000 でリスナーを開きます。デフォルトでは、Elastic Beanstalk はポート 5000 でアプリケーションにリクエストを転送します。

次のファイルを作成します。

このファイルは、シンプルな Spring Boot アプリケーションを作成します。

**Example `~/eb-java/src/main/java/com/example/Application.java`**  

```
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

このファイルは、ここで定義する文字列を返すマッピングを作成します。

**Example `~/eb-java/src/main/java/com/example/Controller.java`**  

```
package com.example;
    
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
    
@RestController
public class Controller {
    
    @GetMapping("/")
    public String index() {
       return "Hello Elastic Beanstalk!";
    }
}
```

このファイルは、Maven プロジェクト設定を定義します。

**Example `~/eb-java/pom.xml`**  

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
  </parent>

  <groupId>com.example</groupId>
  <artifactId>BeanstalkJavaExample</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <java.version>21</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
```

このプロパティファイルは、デフォルトのポートを 5000 に上書きします。これは、Elastic Beanstalk が Java アプリケーションにトラフィックを送信するデフォルトのポートです。

**Example `~/eb-java/application.properties`**  

```
server.port=5000
```

## ステップ 2: アプリケーションをローカルに実行する
<a name="java-quickstart-run-local"></a>

次のコマンドでアプリケーションをパッケージングします。

```
~/eb-java$ mvn clean package
```

次のコマンドでアプリケーションをローカルに実行します。

```
~/eb-java$ java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
```

アプリケーションの実行中に、ブラウザで `http://127.0.0.1:5000/` に移動します。「Hello Elastic Beanstalk\$1」というテキストが表示されます。

## ステップ 3: EB CLI を使用して Java アプリケーションをデプロイする
<a name="java-quickstart-deploy"></a>

Java アプリケーションを Elastic Beanstalk にデプロイする前に、ビルドアプリケーションをディレクトリからクリーンアップし、[Buildfile](java-se-buildfile.md) と [Procfile](java-se-procfile.md) を作成して、Elastic Beanstalk 環境でアプリケーションがビルドおよび実行される方法を制御します。

**アプリケーションのデプロイを準備および設定するには**

1. ビルドされたアプリケーションをクリーンアップします。

   ```
   ~/eb-java$ mvn clean
   ```

1. `Buildfile` を作成します。  
**Example `~/eb-java/Buildfile`**  

   ```
   build: mvn clean package
   ```

   この `Buildfile` は、アプリケーションのビルドに使用されるコマンドを指定します。Java アプリケーション用の `Buildfile` を含めない場合、Elastic Beanstalk はアプリケーションのビルドを試みません。

1. `Procfile` を作成します。  
**Example `~/eb-java/Procfile`**  

   ```
   web: java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
   ```

   この `Procfile` は、アプリケーションの実行に使用されるコマンドを指定します。Java アプリケーション用の `Procfile` を含めない場合、Elastic Beanstalk はソースバンドルのルートに 1 つの JAR ファイルがあると想定し、`java -jar` コマンドを使用してそれを実行しようとします。

 これで、アプリケーションをビルドして起動するための設定ファイルを設定できたので、デプロイする準備が整いました。

**環境を作成し、Java アプリケーションをデプロイするには**

1. **eb init** コマンドを使用して EB CLI リポジトリを初期化します。

   ```
   ~/eb-java eb init -p corretto java-tutorial --region us-east-2
           
   Application java-tutorial has been created.
   ```

   このコマンドは、`java-tutorial` という名前のアプリケーションを作成し、ローカルリポジトリを設定して最新の Java プラットフォームバージョンで環境を作成します。

1. (オプション) **eb init** を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH を使用して connect できるようにします。

   ```
   ~/eb-java$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   1 つのキーペアがすでにある場合はそれを選択するか、またはプロンプトに従ってキーペアを作成します。プロンプトが表示されないか設定を後で変更する必要がない場合は、**eb init -i** を実行します。

1. 環境を作成し、**eb create** を使用してそこにアプリケーションをデプロイします。Elastic Beanstalk は、アプリケーションの zip ファイルを自動的にビルドし、ポート 5000 で起動します。

   ```
   ~/eb-java$ eb create java-env
   ```

   Elastic Beanstalk が環境を作成するのに約 5 分かかります。

## ステップ 4: Elastic Beanstalk でアプリケーションを実行する
<a name="java-quickstart-run-eb-ap"></a>

環境を作成するプロセスが完了したら、**eb open** でウェブサイトを開きます。

```
~/eb-java eb open
```

お疲れ様でした。Elastic Beanstalk で Java アプリケーションをデプロイしました。これにより、アプリケーション用に作成されたドメイン名を使用してブラウザ Window が開きます。

## ステップ 5：クリーンアップ
<a name="java-tutorial-cleanup"></a>

アプリケーションでの作業が終了したら、環境を終了できます。Elastic Beanstalk は、環境に関連付けられているすべての AWS リソースを終了します。

EB CLI を使用して Elastic Beanstalk 環境を終了するには、次のコマンドを実行します。

```
~/eb-java$ eb terminate
```

## AWS アプリケーションの リソース
<a name="java-quickstart-eb-resources"></a>

1 つのインスタンスアプリケーションを作成しました。1 つの EC2 インスタンスを持つ簡単なサンプルアプリケーションとして動作するため、ロードバランシングや自動スケーリングは必要ありません。単一インスタンスアプリケーションの場合、Elastic Beanstalk は次の AWS リソースを作成します。
+ **EC2 インスタンス** – 選択したプラットフォームでウェブアプリケーションを実行するよう設定された Amazon EC2 仮想マシン。

  各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、さまざまなソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、ウェブアプリケーションの前にウェブトラフィックを処理するリバースプロキシとして Apache または nginx のいずれかを使用します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供して、アクセスログとエラーログを生成します。
+ **インスタンスセキュリティグループ** – ポート 80 上の受信トラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブ・アプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。
+ **Amazon S3 バケット** – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。
+ **Amazon CloudWatch アラーム** – 環境内のインスタンスの負荷を監視する 2 つの CloudWatch アラーム。負荷が高すぎる、または低すぎる場合にトリガーされます。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+  **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。

Elastic Beanstalk は、これらのリソースをすべて管理します。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

## 次の手順
<a name="java-quickstart-next-steps"></a>

アプリケーションを実行する環境を手に入れた後、アプリケーションの新しいバージョンや、異なるアプリケーションをいつでもデプロイできるようになります。新しいアプリケーションバージョンのデプロイは、プロビジョニングや EC2 インスタンスの再開が必要ないため、非常に素早く行えます。Elastic Beanstalk コンソールを使用して新しい環境を調べることもできます。詳細な手順については、このガイドの「*開始方法*」の章の「[環境を探索する](GettingStarted.md#GettingStarted.Explore)」を参照してください。

**その他のチュートリアルを試す**  
異なるアプリケーション例の他のチュートリアルを試したい場合は、「[サンプルアプリケーションとチュートリアル](java-getstarted.md)」を参照してください。

1 つか 2 つのサンプルアプリケーションをデプロイし、ローカルにアプリケーションを開発して実行する準備が整ったら、「[Java 開発環境をセットアップする](java-development-environment.md)」を参照します。

## Elastic Beanstalk コンソールでデプロイする
<a name="java-quickstart-console"></a>

Elastic Beanstalk コンソールを使用してサンプルアプリケーションを起動することもできます。詳細な手順については、このガイドの「*開始方法*」の章の「[サンプルアプリケーションを作成する](GettingStarted.md#GettingStarted.CreateApp)」を参照してください。

# QuickStart: Elastic Beanstalk に Tomcat 用の Java JSP ウェブアプリケーションをデプロイする
<a name="tomcat-quickstart"></a>

このチュートリアルでは、JavaServer Page (JSP) を使用してシンプルな Java ウェブアプリケーションを作成するプロセスについて説明します。1 つの Elastic Beanstalk 環境に複数のウェブアプリケーションを WAR ファイル形式でバンドルする場合は、「[Tomcat 環境用に複数の WAR ファイルをバンドルする](java-tomcat-multiple-war-files.md)」を参照してください。

**本番稼働用ではない**  
例はデモンストレーションのみを目的としています。サンプルアプリケーションを本番環境で使用しないでください。

**Topics**
+ [

## AWS アカウント
](#tomcat-quickstart-aws-account)
+ [

## 前提条件
](#tomcat-quickstart-prereq)
+ [

## ステップ 1: Java JSP アプリケーションを作成する
](#tomcat-quickstart-create-app)
+ [

## ステップ 2: EB CLI を使用して Java JSP アプリケーションをデプロイする
](#tomcat-quickstart-deploy)
+ [

## ステップ 3: Elastic Beanstalk でアプリケーションを実行する
](#tomcat-quickstart-run-eb-ap)
+ [

## ステップ 4: クリーンアップする
](#go-tutorial-cleanup)
+ [

## AWS アプリケーションの リソース
](#tomcat-quickstart-eb-resources)
+ [

## 次の手順
](#tomcat-quickstart-next-steps)
+ [

## Elastic Beanstalk コンソールでデプロイする
](#tomcat-quickstart-console)

## AWS アカウント
<a name="tomcat-quickstart-aws-account"></a>

まだ AWS のお客様でない場合は、 AWS アカウントを作成する必要があります。サインアップすると、Elastic Beanstalk やその他の必要な AWS サービスにアクセスできます。

 AWS アカウントをすでにお持ちの場合は、「」に進むことができます[前提条件](#tomcat-quickstart-prereq)。

### AWS アカウントを作成する
<a name="tomcat-quickstart-aws-account-procedure"></a>

#### にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

#### 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、*AWS IAM アイデンティティセンター 「 ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。

## 前提条件
<a name="tomcat-quickstart-prereq"></a>

このガイドの手順に従うには、run commands のためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 (\$1) と現在のディレクトリの名前が前に付けられて、リストに示されます。

```
~/eb-project$ this is a command
this is output
```

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

### EB CLI
<a name="tomcat-quickstart-prereq.ebcli"></a>

このチュートリアルでは、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) を使用します。EB CLI をインストールおよび設定する手順の詳細については、「[セットアップスクリプトを使用して EB CLI をインストールする (推奨)](eb-cli3.md#eb-cli3-install)」および「[EB CLI の設定](eb-cli3-configuration.md)」を参照してください。

## ステップ 1: Java JSP アプリケーションを作成する
<a name="tomcat-quickstart-create-app"></a>

プロジェクトディレクトリを作成します。

```
~$ mkdir eb-tomcat
~$ cd eb-tomcat
```

次に、Elastic Beanstalk を使用してデプロイするアプリケーションを作成します。「Hello World」ウェブアプリケーションを作成します。

`index.jsp` という名前のシンプルな JSP ファイルを作成します。

**Example `~/eb-tomcat/index.jsp`**  

```
<html>
  <body>
    <%out.println("Hello Elastic Beanstalk!");%>
  </body>
</html>
```

## ステップ 2: EB CLI を使用して Java JSP アプリケーションをデプロイする
<a name="tomcat-quickstart-deploy"></a>

次のコマンドを実行して、このアプリケーションの Elastic Beanstalk 環境を作成します。

 

**環境を作成し、Java JSP アプリケーションをデプロイするには**

1. **eb init** コマンドを使用して EB CLI リポジトリを初期化します。

   ```
   ~/eb-tomcat$ eb init -p tomcat tomcat-tutorial --region us-east-2
   ```

   このコマンドは、`tomcat-tutorial` という名前のアプリケーションを作成し、ローカルリポジトリを設定して最新の Tomcat プラットフォームバージョンで環境を作成します。

1. (オプション) **eb init** を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH を使用して connect できるようにします。

   ```
   ~/eb-go$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   1 つのキーペアがすでにある場合はそれを選択するか、またはプロンプトに従ってキーペアを作成します。プロンプトが表示されないか設定を後で変更する必要がない場合は、**eb init -i** を実行します。

1. 環境を作成し、**eb create** を使用してそこにアプリケーションをデプロイします。Elastic Beanstalk は、アプリケーションの zip ファイルを自動的にビルドし、ポート 5000 で起動します。

   ```
   ~/eb-tomcat$ eb create tomcat-env
   ```

   Elastic Beanstalk が環境を作成するのに約 5 分かかります。

## ステップ 3: Elastic Beanstalk でアプリケーションを実行する
<a name="tomcat-quickstart-run-eb-ap"></a>

環境を作成するプロセスが完了したら、**eb open** でウェブサイトを開きます。

```
~/eb-tomcat$ eb open
```

お疲れ様でした。Elastic Beanstalk で Java JSP アプリケーションをデプロイしました。これにより、アプリケーション用に作成されたドメイン名を使用してブラウザ Window が開きます。

## ステップ 4: クリーンアップする
<a name="go-tutorial-cleanup"></a>

アプリケーションでの作業が終了したら、環境を終了できます。Elastic Beanstalk は、環境に関連付けられているすべての AWS リソースを終了します。

EB CLI を使用して Elastic Beanstalk 環境を終了するには、次のコマンドを実行します。

```
~/eb-tomcat$ eb terminate
```

## AWS アプリケーションの リソース
<a name="tomcat-quickstart-eb-resources"></a>

1 つのインスタンスアプリケーションを作成しました。1 つの EC2 インスタンスを持つ簡単なサンプルアプリケーションとして動作するため、ロードバランシングや自動スケーリングは必要ありません。単一インスタンスアプリケーションの場合、Elastic Beanstalk は次の AWS リソースを作成します。
+ **EC2 インスタンス** – 選択したプラットフォームでウェブアプリケーションを実行するよう設定された Amazon EC2 仮想マシン。

  各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、さまざまなソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、ウェブアプリケーションの前にウェブトラフィックを処理するリバースプロキシとして Apache または nginx のいずれかを使用します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供して、アクセスログとエラーログを生成します。
+ **インスタンスセキュリティグループ** – ポート 80 上の受信トラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブ・アプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。
+ **Amazon S3 バケット** – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。
+ **Amazon CloudWatch アラーム** – 環境内のインスタンスの負荷を監視する 2 つの CloudWatch アラーム。負荷が高すぎる、または低すぎる場合にトリガーされます。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+  **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。

Elastic Beanstalk は、これらのリソースをすべて管理します。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

## 次の手順
<a name="tomcat-quickstart-next-steps"></a>

アプリケーションを実行する環境を手に入れた後、アプリケーションの新しいバージョンや、異なるアプリケーションをいつでもデプロイできるようになります。新しいアプリケーションバージョンのデプロイは、プロビジョニングや EC2 インスタンスの再開が必要ないため、非常に素早く行えます。Elastic Beanstalk コンソールを使用して新しい環境を調べることもできます。詳細な手順については、このガイドの「*開始方法*」の章の「[環境を探索する](GettingStarted.md#GettingStarted.Explore)」を参照してください。

**その他のチュートリアルを試す**  
異なるアプリケーション例の他のチュートリアルを試したい場合は、「[サンプルアプリケーションとチュートリアル](java-getstarted.md)」を参照してください。

1 つか 2 つのサンプルアプリケーションをデプロイし、ローカルの Tomcat ウェブコンテナで Java アプリケーションを開発して実行する準備が整ったら、「[Java 開発環境をセットアップする](java-development-environment.md)」を参照します。

## Elastic Beanstalk コンソールでデプロイする
<a name="tomcat-quickstart-console"></a>

Elastic Beanstalk コンソールを使用してサンプルアプリケーションを起動することもできます。詳細な手順については、このガイドの「*開始方法*」の章の「[サンプルアプリケーションを作成する](GettingStarted.md#GettingStarted.CreateApp)」を参照してください。

# Java 開発環境をセットアップする
<a name="java-development-environment"></a>

このトピックでは、Java 開発環境を設定し、アプリケーションを AWS Elastic Beanstalkにデプロイする前にローカルでテストする手順について説明します。また、便利なツールのインストール手順を提供するウェブサイトも参照します。

**Topics**
+ [

## Java 開発キットをインストールする
](#java-development-environment-jdk)
+ [

## ウェブ コンテナをインストールする
](#java-development-environment-tomcat)
+ [

## ライブラリをダウンロードする
](#java-development-environment-libraries)
+ [

## AWS SDK for Java のインストール
](#java-development-environment-sdk)
+ [

## IDE またはテキストエディタをインストールする
](#java-development-environment-ide)

## Java 開発キットをインストールする
<a name="java-development-environment-jdk"></a>

Java 開発キット（JDK）をインストールする 指定しない場合は、最新バージョンを取得します。[oracle.com](http://www.oracle.com/technetwork/java/javase/downloads/index.html) で JDK をダウンロードします。

JDK には、ソースファイルを Elastic Beanstalk ウェブサーバーで実行可能なクラスファイルに組み込む目的で使用できる Java コンパイラが含まれています。

## ウェブ コンテナをインストールする
<a name="java-development-environment-tomcat"></a>

まだ別のウェブコンテナまたはフレームワークがない場合は、Elastic Beanstalk が Amazon Linux オペレーティングシステムでサポートするバージョンの Tomcat をインストールします。Elastic Beanstalk が現在サポートする Apache Tomcat のバージョンのリストについては、「AWS Elastic Beanstalk プラットフォーム」ドキュメントの「[Tomcat](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java)」を参照してください。[Apache Tomcat](http://tomcat.apache.org) ウェブサイトから、環境に適用される Tomcat バージョンをダウンロードします。

## ライブラリをダウンロードする
<a name="java-development-environment-libraries"></a>

Elastic Beanstalk プラットフォームには、デフォルトでいくつかのライブラリが含まれています。アプリケーションが使用するライブラリをダウンロードしてプロジェクトフォルダに保存し、アプリケーションソースバンドルにデプロイします。

Tomcat をローカルでインストールしている場合、インストール フォルダからサーブレット API および JavaServer Pages（JSP）API ライブラリをコピーできます。Tomcat プラットフォームのバージョンをデプロイする場合は、これらのファイルをソースバンドルに含める必要はありませんが、`classpath` に組み込んでこれらを使用するすべてのクラスをコンパイルする必要があります。

JUnit、Google Guava、Apache Commons は、複数の便利なライブラリを提供します。詳細についてはそれぞれのホームページにアクセスしてください。
+  [JUnit をダウンロードする](https://github.com/junit-team/junit/wiki/Download-and-Install) 
+  [Google Guava をダウンロードする](https://code.google.com/p/guava-libraries/) 
+  [Apache Commons をダウンロードする](http://commons.apache.org/downloads/) 

## AWS SDK for Java のインストール
<a name="java-development-environment-sdk"></a>

アプリケーション内から AWS リソースを管理する必要がある場合は、 AWS SDK for Java をインストールします。たとえば、 では AWS SDK for Java、Amazon DynamoDB (DynamoDB) を使用して、複数のウェブサーバー間で Apache Tomcat アプリケーションのセッション状態を共有できます。詳細については、 AWS SDK for Java ドキュメントの「[Manage Tomcat Session State with Amazon DynamoDB](https://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-tomcat-session-manager.html)」を参照してください。

詳細とインストール方法については、[AWS SDK for Java のホームページ](https://aws.amazon.com/sdk-for-java/)にアクセスしてください。

## IDE またはテキストエディタをインストールする
<a name="java-development-environment-ide"></a>

統合された開発環境（IDE）は、アプリケーション開発を用意にする幅広い機能を提供します。Java 開発用の IDE を使用していない場合は、Eclipse と IntelliJ を試してどちらが使いやすいかを確認してください。
+  [Eclipse IDE for Java EE Developers をインストールする](https://www.eclipse.org/downloads/) 
+  [IntelliJ をインストールする](https://www.jetbrains.com/idea/) 

IDE では、ソースコントロールにコミットする必要がないファイルがプロジェクトフォルダに追加される場合があります。ソースコントロールにこれらのファイルがコミットされないようにするには、`.gitignore` または同等のソースコントロールツールを使用します。

IDE の特徴のすべては必要なく、単純にコーディングを開始する場合は、[Sublime Text のインストール](http://www.sublimetext.com/)を検討します。

**注記**  
2023 年 5 月 31 日に [AWS Toolkit for Eclipse](https://docs.aws.amazon.com//toolkit-for-eclipse/v1/user-guide/welcome.html) のサポートが終了したため、 AWSによるサポートも終了しました。のライフサイクルの終了の詳細については AWS Toolkit for Eclipse、 AWS Toolkit for Eclipse GitHub リポジトリの [README.md](https://github.com/aws/aws-toolkit-eclipse) ファイルを参照してください。

# Java のその他の Elastic Beanstalk アプリケーションの例とチュートリアル
<a name="java-getstarted"></a>

このセクションでは、その他のアプリケーションとチュートリアルについて説明します。このトピックで前述した [Java の QuickStart](java-quickstart.md) および [Tomcat での Java の QuickStart](tomcat-quickstart.md) トピックでは、EB CLI を使用したサンプル Java アプリケーションの起動について説明します。

で Java アプリケーションの使用を開始するには AWS Elastic Beanstalk、最初のアプリケーションバージョンとしてアップロードし、 環境にデプロイするアプリケーション[ソースバンドル](applications-sourcebundle.md)が必要です。環境を作成すると、スケーラブルなウェブアプリケーションを実行するために必要なすべての AWS リソースが Elastic Beanstalk によって割り当てられます。

## サンプル Java アプリケーションで環境を起動する
<a name="java-getstarted-samples"></a>

Elastic Beanstalk は、各プラットフォームの単一ページのサンプルアプリケーションと、Amazon RDS や言語、プラットフォーム固有の機能や APIs などの追加 AWS リソースの使用を示すより複雑な例を提供します。

単一ページのサンプルは、環境を作成するときに取得する同じコードであり、独自のソースコードを提供する必要はありません。複雑なサンプルアプリケーションは GitHub でホストされていますが、Elastic Beanstalk 環境にデプロイする前にはコンパイルやビルドが必要になる場合があります。

 


**サンプル**  

|  名前  |  サポートされるバージョン  |  環境タイプ  |  送信元  |  説明  | 
| --- | --- | --- | --- | --- | 
|  Tomcat (単一ページ)  |  すべての *Tomcat with Corretto* プラットフォームブランチ  |  ウェブサーバー ワーカー  |   [tomcat.zip](samples/tomcat.zip)   |  1 ページ（`index.jsp`）がウェブサイトのルートに表示されるように設定された Tomcat ウェブアプリケーションです。 [ワーカー環境](using-features-managing-env-tiers.md)では、このサンプルには、1 分に 1 回 [`cron.yaml`] を呼び出すスケジュール済みタスク設定する [`scheduled.jsp`] ファイルが含まれます。`scheduled.jsp` が呼び出されると、`/tmp/sample-app.log` のログファイルに書き込まれます。最後に、設定ファイルが `.ebextensions` に含められれます。この設定ファイルにより、`/tmp/` のログは、環境ログがリクエストされたときに Elastic Beanstalk が読み取る場所にコピーされます。 このサンプルを実行している環境で [X-Ray の統合を有効にする](environment-configuration-debugging.md)と、アプリケーションは X-Ray に関する追加のコンテンツを表示し、X-Ray コンソールで表示できるデバッグ情報を生成するオプションを提供します。  | 
|  Corretto (単一ページ)  |  Corretto 11 Corretto 8  |  ウェブサーバー  |  [corretto.zip](samples/corretto.zip)  |  `Buildfile` 設定ファイルおよび `Procfile` 設定ファイルを使用する Corretto アプリケーションです。 このサンプルを実行している環境で [X-Ray の統合を有効にする](environment-configuration-debugging.md)と、アプリケーションは X-Ray に関する追加のコンテンツを表示し、X-Ray コンソールで表示できるデバッグ情報を生成するオプションを提供します。  | 
|  Scorekeep  | Java 8 | ウェブサーバー | [クローン the repo at GitHub.com](https://github.com/awslabs/eb-java-scorekeep) |  *Scorekeep* は、Spring フレームワークを使ってユーザー、セッション、およびゲームを作成および管理するためのインターフェイスを提供する、RESTful ウェブ API です。API は、HTTP を介して API を使用する Angular 1.5 ウェブアプリを持つバンドルです。 アプリケーションは、Java SE プラットフォームの機能を使って依存関係をダウンロードし、オンインスタンスを構築することで、ソースバンドルのサイズを最小化します。また、アプリケーションには、プロキシを通じてポート 80 で静的にフロントエンドウェブアプリに対応するデフォルト設定を上書きし、`/api` で実行される API に `localhost:5000` 以下のパスをルーティングする nginx 設定ファイルが含まれています。 Scorekeep には、`xray` で使用する Java アプリケーションの設定方法を示す AWS X-Rayブランチも含まれます。サーブレットフィルターを使用した受信 HTTP リクエストの計測、自動および手動 AWS SDK クライアントの計測、レコーダー設定、送信 HTTP リクエストと SQL クライアントの計測を示します。 手順については readme を参照するか、[AWS X-Ray 入門チュートリアル](https://docs.aws.amazon.com/xray/latest/devguide/xray-gettingstarted.html)を使用して X-Ray でアプリケーションをでお試しください。  | 
|  Does it Have Snakes?  | Tomcat 8 と Java 8 | ウェブサーバー | [クローン the repo at GitHub.com](https://github.com/awslabs/eb-tomcat-snakes) |  *Does it Have Snakes?* は、Elastic Beanstalk 設定ファイル、Amazon RDS、JDBC、PostgreSQL、サーブレット、JSP、簡易タグのサポート、タグファイル、Log4J、ブートストラップ、Jackson の使用方法を示す Tomcat ウェブアプリケーションです。 このプロジェクトのソースコードには、クラスファイルにサーブレットとモデルをコンパイルし、Elastic Beanstalk 環境にデプロイできるウェブアーカイブに必要ファイルをパッケージする、最小限のビルドスクリプトが含まれています。完全な手順については、プロジェクトのリポジトリ内の readme ファイルを参照してください。  | 
| Locust Load Generator | Java 8 | ウェブサーバー | [クローン the repo at GitHub.com](https://github.com/awslabs/eb-locustio-sample) |  別の Elastic Beanstalk 環境で実行している別のウェブアプリケーションの負荷テストに使用できるウェブアプリケーションです。`Buildfile` ファイル、`Procfile` ファイル、DynamoDB、[Locust ](http://locust.io/)、オープンソースの負荷テストツールの使用方法を示しています。  | 

サンプルアプリケーションをダウンロードし、以下の手順に従って Elastic Beanstalk にデプロイします。

**アプリケーションで環境を起動する場合 (コンソール)**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、**[アプリケーション]** を選択します。リストから既存のアプリケーションを選択します。[ アプリケーションの管理](applications.md) の手順に従って作成することもできます。

1. アプリケーションの概要ページで、**[新しい環境の作成]** を選択します。

   これにより、**[Create environment]** (環境を作成する) ウィザードが起動します。ウィザードには、新しい環境を作成するための一連のステップが用意されています。

1. **[環境枠]** では、**[ウェブサーバー環境]** または **[ワーカー環境]** の[環境枠](concepts.md#concepts-tier)を選択します。作成後に環境枠を変更することはできません。
**注記**  
[Windows Server プラットフォームの .NET](create_deploy_NET.md) はワーカー環境枠をsupport していません。

   **[アプリケーション情報]** フィールドは、以前に選択したアプリケーションに基づいてデフォルトで設定されます。

   **[環境情報]** では、アプリケーション名に基づいて **[環境名]** がデフォルトでグループ化されます。別の環境名を使用する場合は、フィールドに別の値を入力できます。必要に応じて **[ドメイン]** の名前を入力できます。入力しない場合、Elastic Beanstalk は値を自動的に生成します。必要に応じて **[環境の説明]** を入力することもできます。

1. **プラットフォーム** では、アプリケーションで使用される言語に一致するプラットフォームとプラットフォームブランチを選択します。
**注記**  
Elastic Beanstalk では、一覧表示されるほとんどのプラットフォームで複数の[バージョン](concepts.platforms.md)がサポートされています。デフォルトでは、選択したプラットフォームとプラットフォームブランチの推奨バージョンがコンソールによって選択されます。アプリケーションで異なるバージョンが必要な場合は、ここでそのバージョンを選択できます。サポートされているプラットフォームのバージョンについては、[Elastic Beanstalk でサポートされているプラットフォーム](concepts.platforms.md) を参照してください。

1. **アプリケーションコード**については、続行するためにいくつかの選択肢があります。
   + ソースコードを指定せずにデフォルトのサンプルアプリケーションを起動するには、**[サンプルアプリケーション]** を選択します。このアクションは、以前に選択したプラットフォームに対して Elastic Beanstalk が提供する単一ページアプリケーションを選択します。
   + このガイドからサンプルアプリケーションをダウンロードした場合、またはアプリケーション用に自分自身のソースコードがある場合は、次の手順を実行します。

     1. **[コードのアップロード]** を選択します。

     1. 次に **[ローカルファイル]** を選択し、**[アプリケーションをアップロード]** で **[ファイルを選択]** を選択します。

     1. クライアントマシンのオペレーティングシステムには、ダウンロードしたローカルファイルを選択するためのインターフェイスが表示されます。ソースバンドルファイルを選択して続行します。

1. **プリセット**の選択は、環境の目的によって異なります。
   + Elastic Beanstalk または開発環境について学ぶためにサンプル環境を作成する場合は、**単一インスタンス (無料利用枠の対象)** を選択します。
   + 本稼働環境またはロードバランシングを詳しく学ぶための環境を作成する場合は、**[高可用性]** オプションのいずれかを選択してください。

1. [**次へ**] を選択します。

**サービスアクセスを設定するには**  
次に、2 つのロールが必要です。*[サービスロール]* を使用すると、Elastic Beanstalk は EC2 インスタンスをモニタリングし、環境のプラットフォームをアップグレードできます。*[EC2 インスタンスプロファイル]* ロールは、ログの書き込みや他のサービスとのやり取りなどのタスクを許可します。

**サービスロールを作成または選択するには**

1. 以前に **[サービスロール]** を作成していて、既存のロールを選択する場合は、**[サービスロール]** ドロップダウンから値を選択し、サービスロールを作成するためのこれらの残りのステップをスキップします。

1. **[サービスロール]** に一覧表示された値がない場合、または新しいものを作成する場合は、次のステップに進みます。

1. **[サービスロール]** では、**[ロールの作成]** を選択します。

1. **[信頼できるエンティティタイプ]** で、**[AWS サービス]** を選択してください。

1. **[ユースケース]** では、**[Elastic Beanstalk – 環境]** を選択します。

1. [**次へ**] を選択します。

1. **[アクセス許可ポリシー]** に以下が含まれていることを確認し、**[次へ]** を選択します。
   + `AWSElasticBeanstalkEnhancedHealth`
   + `AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy`

1. [**ロールの作成**] を選択してください。

1. **[サービスアクセスの設定]** タブに戻り、リストを更新して、新しく作成したサービスロールを選択します。

**EC2 インスタンスプロファイルを作成または選択するには**

1. 以前に **[EC2 インスタンスプロファイル]** を作成していて、既存の EC2 インスタンスプロファイルを選択する場合は、**[EC2 インスタンスプロファイル]** ドロップダウンから値を選択し、EC2 インスタンスプロファイルを作成するためのこれらの残りのステップをスキップします。

1. **[EC2 インスタンスプロファイル]** に一覧表示された値がない場合、または新しいものを作成する場合は、次のステップに進みます。

1. [**ロールの作成**] を選択してください。

1. **[信頼できるエンティティタイプ]** で、**[AWS サービス]** を選択します。

1. **[ユースケース]** では、**[Elastic Beanstalk – コンピューティング]** を選択します。

1. [**次へ**] を選択します。

1. **[アクセス許可ポリシー]** に以下が含まれていることを確認し、**[次へ]** を選択します。
   + `AWSElasticBeanstalkWebTier`
   + `AWSElasticBeanstalkWorkerTier`
   + `AWSElasticBeanstalkMulticontainerDocker`

1. [**ロールの作成**] を選択してください。

1. **[サービスアクセスの設定]** タブに戻り、リストを更新して、新しく作成した EC2 インスタンスプロファイルを選択します。

**アプリケーションの設定と作成を完了するには**

1. (オプション) EC2 キーペアを以前に作成している場合は、**[EC2 キーペア]** フィールドドロップダウンから選択できます。これを使用して、Elastic Beanstalk がアプリケーション用にプロビジョニングした Amazon EC2 インスタンスに安全にログインできます。このステップをスキップした場合、環境の作成後に EC2 キーペアをいつでも作成して割り当てることができます。詳細については、「[EC2 キーペア](using-features.managing.security.md#using-features.managing.security.keypair)」を参照してください。

1. **[Configure service access]** (サービスアクセスの設定) ページで **[Skip to Review]** (確認をスキップ) を選択します。

1. **[Review]** (レビュー) ページに、すべての選択内容の概要が表示されます。

   環境をさらにカスタマイズするには、設定する項目を含むステップの横にある **[Edit]** (編集) を選択します。以下のオプションは、環境の作成中にのみ設定できます。
   + 環境名
   + ドメイン名
   + プラットフォームのバージョニング
   + プロセッサ
   + ロードバランサーのタイプ
   + 階層

   次の設定は環境の作成後に変更できますが、新しいインスタンスあるいはその他のリソースをプロビジョニングする必要があり、適用までに長い時間がかかる場合があります。
   + インスタンスタイプ、ルートボリューム、キーペア、および AWS Identity and Access Management (IAM) ロール
   + 内部 Amazon RDS データベース
   + VPC

   すべての使用できる設定の詳細については、「[新しい環境の作成ウィザード](environments-create-wizard.md)」を参照してください。

1. ページ下部の **[Submit]** (送信) を選択して、新しい環境の作成を開始します。

## 次の手順
<a name="java-getstarted-next"></a>

環境でアプリケーションを実行すると、アプリケーションの[新しいバージョン](using-features.deploy-existing-version.md)や、まったく異なるアプリケーションをいつでもデプロイできるようになります。新しいアプリケーションバージョンのデプロイは、プロビジョニングや EC2 インスタンスの再開が必要ないため、非常に素早く行えます。

サンプルアプリケーションを 1 つか 2 つデプロイし、Java アプリケーションをローカルで開発および実行する準備が整ったら、[次のセクション](java-development-environment.md)を参照して、必要なすべてのツールやライブラリとともに Java 開発環境を設定します。

# Elastic Beanstalk Tomcat プラットフォームを使用する
<a name="java-tomcat-platform"></a>

このトピックでは、Elastic Beanstalk Tomcat プラットフォームで実行される Java アプリケーションを設定、ビルド、実行する方法について説明します。

 AWS Elastic Beanstalk Tomcat プラットフォームは、Tomcat ウェブコンテナで実行できる Java ウェブアプリケーションの[プラットフォームバージョンの](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java)セットです。Tomcat は、nginx プロキシサーバーの背後で実行されます。各プラットフォームブランチは Tomcat の 1 つのメジャーバージョンに対応しています。

設定オプションは[実行中の環境の設定を変更するために](environment-configuration-methods-after.md) Elastic Beanstalk コンソールで利用できます。環境を終了したときにその設定が失われないようにするため、[保存済み設定](environment-configuration-savedconfig.md)を使用して設定を保存し、それを後で他の環境に適用することができます。

ソースコードの設定を保存する場合、[設定ファイル](ebextensions.md)を含めることができます。設定ファイルの設定は、環境を作成するたびに、またはアプリケーションをデプロイするたびに適用されます。設定ファイルを使用して、デプロイの間にパッケージをインストールしたり、スクリプトを実行したり、他のインスタンスのカスタマイズオペレーションを実行することもできます。

Elastic Beanstalk Tomcat プラットフォームには、アプリケーションにリクエストを転送するリバースプロキシが含まれています。アプリケーションの負荷を減らすため、ソースコードのフォルダーから静的アセットに対応するようプロキシサーバーを設定する[設定オプション](#java-tomcat-namespaces)を使用できます。高度なシナリオでは、ソースバンドルに[独自の `.conf` ファイルを含めて](java-tomcat-proxy.md) Elastic Beanstalk のプロキシ設定を拡張するか、これを完全に上書きできます。

**注記**  
Elastic Beanstalk は、Tomcat プラットフォームのプロキシサーバーとして [nginx](https://www.nginx.com/) (デフォルト) および [Apache HTTP サーバー](https://httpd.apache.org/)をサポートします。Elastic Beanstalk Tomcat 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームブランチを使用している場合は、[Apache HTTP Server Version 2.2](https://httpd.apache.org/docs/2.2/) を使用することもできます。これらの古いプラットフォームブランチでは、Apache (最新) がデフォルトです。  
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

ウェブアプリケーションアーカイブ (WAR) ファイルの Java アプリケーションは固有の構造でパッケージングする必要があります。必要な構造と、その構造をプロジェクトディレクトリの構造に関連付ける方法については、「[プロジェクトフォルダーを構築する](java-tomcat-platform-directorystructure.md)」を参照してください。

同じウェブサーバーで複数のアプリケーションサーバーを実行するため、単一のソースバンドルに[複数の WAR ファイルをバンドル](java-tomcat-multiple-war-files.md)することができます。複数のソースバンドルの各アプリケーションは、ルートパス (`ROOT.war` で実行される [`myapp.elasticbeanstalk.com/`]) またはその下のパスディレクトリ (`app2.war` で実行される [`myapp.elasticbeanstalk.com/app2/`.war]) のいずれかで実行されます (どちらかは WAR の名前によって決まります)。単一の WAR ソースバンドルでは、アプリケーションは常にルートパスで実行されます。

Elastic Beanstalk コンソールで適用される設定は、設定ファイルに同じ設定があれば、それらの設定を上書きします。これにより、設定ファイルでデフォルト設定を定義し、コンソールでそのデフォルト設定を環境固有の設定で上書きできます。設定の優先順位の詳細と設定の他の変更方法については、「[設定オプション](command-options.md)」を参照してください。

Elastic Beanstalk Linux ベースのプラットフォームを拡張するさまざまな方法の詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

**Topics**
+ [

## Tomcat 環境を設定する
](#java-tomcat-options)
+ [

## Tomcat 設定の名前空間
](#java-tomcat-namespaces)
+ [

# Tomcat 環境用に複数の WAR ファイルをバンドルする
](java-tomcat-multiple-war-files.md)
+ [

# プロジェクトフォルダーを構築する
](java-tomcat-platform-directorystructure.md)
+ [

# プロキシサーバーを設定します
](java-tomcat-proxy.md)

## Tomcat 環境を設定する
<a name="java-tomcat-options"></a>

Elastic Beanstalk Tomcat プラットフォームには、すべてのプラットフォームに用意されている標準オプションに加えて、プラットフォーム固有のオプションがいくつかあります。これらのオプションにより、環境のウェブサーバーで実行される Java 仮想マシン (JVM) を設定し、アプリケーションに情報設定文字列を提供するシステムプロパティを定義できます。

Elastic Beanstalk コンソールを使用して、Amazon S3 へのログローテーションを有効にし、アプリケーションが環境から読むことができる変数を設定することができます。

**Elastic Beanstalk コンソールで Tomcat 環境を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

### コンテナオプション
<a name="java-tomcat-options-container"></a>

次のプラットフォーム固有のオプションを指定できます。
+ [**プロキシサーバー**] – 環境インスタンスで使用するプロキシサーバーです。デフォルトでは、nginx が使用されます。

### JVM コンテナオプション
<a name="java-tomcat-options-jvm"></a>

Java 仮想マシン (JVM) のヒープサイズは、*[ガベージコレクション](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)*が発生する前にアプリケーションがメモリで作成できるオブジェクトの数を決定します。**JVM の初期ヒープ サイズ** (`-Xms option`) と **JVM の最大ヒープ サイズ** (`-Xmx` オプション) を変更できます。初期ヒープサイズを大きく設定すると、ガベージコレクションの発生前により多くのオブジェクトを作成できますが、ガベージコレクタがヒープを圧縮する時間が長くなります。最大ヒープサイズは、多量の作業を実行中にヒープを拡張する場合に JVM が割り当てることのできる最大メモリ容量を指定します。

**注記**  
使用可能なメモリは、Amazon EC2 インスタンスタイプによって異なります。Elastic Beanstalk 環境で使用可能な EC2 インスタンスタイプの詳細については、*Amazon Elastic Compute Cloud Linux インスタンス用ユーザーガイド* の「[インスタンスタイプ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)」を参照してください。

JVM ヒープの*永続世代*は、クラス定義と関連メタデータを保存するセクションです。永続世代のサイズを変更するには、**[JVM PermGen の最大サイズ]** (`-XX:MaxPermSize`) オプションに新しいサイズを入力します。この設定が適用されるのは、Java 7 以前のみです。このオプションは JDK 8 で廃止され、**[MaxMetaspace サイズ]** (`-XX:MaxMetaspaceSize`) オプションに置き換えられました。

**重要**  
JDK 17 では、Java `-XX:MaxPermSize` オプションのサポートが削除されました。Corretto 17 を搭載した Elastic Beanstalk プラットフォームブランチで実行されている環境でこのオプションを使用すると、エラーが発生します。Elastic Beanstalk は、[2023 年 7 月 13 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-07-13-al2023.html)に Corretto 17 を搭載した Tomcat を実行する最初のプラットフォームブランチをリリースしました。  
詳細については、以下のリソースを参照してください。  
Oracle Java ドキュメンテーション Web サイト: [Java オプションが削除されました](https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html#removed-java-options) 
Oracle Java ドキュメントのウェブサイト:「[その他の考慮事項](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html)」の「*クラスメタデータ*」セクション

Elastic Beanstalk プラットフォームとそのコンポーネントの詳細については、「*AWS Elastic Beanstalk  プラットフォーム*ガイド」の「[サポートされているプラットフォーム](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html)」を参照してください。

### ログオプション
<a name="java-tomcat-options-logs"></a>

[**Log Options**] セクションには、2 つの設定があります。
+ **インスタンスプロファイル** – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。
+ **[Enable log file rotation to Amazon S3]** (Amazon S3 へのログファイルのローテーションの有効化) - アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

### 静的ファイル
<a name="java-tomcat-options-staticfiles"></a>

パフォーマンスを向上させるために、**[Static files]** (静的ファイル) セクションを使用して、ウェブアプリケーション内のディレクトリセットから静的ファイル (HTML、イメージなど) を配信するようにプロキシサーバーを設定することができます。ディレクトリごとに、仮想パスをディレクトリマッピングに設定します。プロキシサーバーは、指定されたパスのファイルに対するリクエストを受け取ると、アプリケーションにリクエストをルーティングする代わりにファイルを直接　　処理します。

設定ファイルまたは、Elastic Beanstalk コンソールを使用した静的ファイルの設定の詳細については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

### 環境プロパティ
<a name="java-tomcat-options-properties"></a>

[**環境プロパティ**] セクションでは、アプリケーションを実行している Amazon EC2 インスタンスの環境設定を指定できます。環境プロパティは、キーと値のペアでアプリケーションに渡されます。

Tomcat プラットフォームは、必要に応じて外部データベースに接続文字列を渡すため、`JDBC_CONNECTION_STRING` という名前の Tomcat 環境のプレースホルダプロパティを定義します。

**注記**  
RDS DB インスタンスを環境にアタッチする場合は、Elastic Beanstalk によって提供される Amazon Relational Database Service (Amazon RDS) 環境プロパティから JDBC 接続文字列を動的に構築します。JDBC\$1CONNECTION\$1STRING は、Elastic Beanstalk でプロビジョニングされないデータベースインスタンスにのみ使用します。  
Java アプリケーションで Amazon RDS を使用する方法の詳細については、「」を参照してください[Amazon RDS DB インスタンスを Java Elastic Beanstalk 環境に追加する](java-rds.md)

[2025 年 3 月 26 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html)より前にリリースされた Tomcat プラットフォームバージョンでは、`System.getProperty()` を使用して環境変数にアクセスできます。例えば、次のコードを使用して変数から `API_ENDPOINT` という名前のプロパティを読み取ることができます。

```
String endpoint = System.getProperty("API_ENDPOINT");
```

[2025 年 3 月 26 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html)以降にリリースされた Tomcat プラットフォームバージョンでは、`System.getenv` を使用してプレーンテキストの環境変数にアクセスすることもできます。引き続き `System.getProperty` を使用して、プレーンテキストの環境変数にアクセスできます。ただし、[シークレットとして保存されている環境変数](AWSHowTo.secrets.env-vars.md)は、`System.getenv` を使用してのみ使用できます。例えば、次のコードを使用して `API_KEY` という名前の環境変数を読み取ることができます。

```
String apiKey = System.getenv("API_KEY");
```

**重要**  
[2025 年 3 月 26 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html)以降にリリースされた Tomcat プラットフォームバージョンで環境変数への `System.getenv()` アクセスを追加すると、Java システムプロパティよりも環境変数を優先するアプリケーションで、または、`System.getProperty()` から `System.getenv()` に明示的に切り替えるときに予期しない動作が発生する可能性があります。  
(コマンドラインを介して渡される) システムプロパティでは特殊文字のシェルエスケープが必要である一方で、環境変数では必要ではないため、Java システムプロパティの代わりに環境変数を使用したときに、値は異なる方法で解決される場合があります。  
アプリケーションが影響を受ける場合は、次の点を考慮してください。  
`System.getenv()` の使用時に環境プロパティ値からエスケープ文字を削除する
明示的に `System.getProperty()` を使用するようにアプリケーションを設定する
アップグレード時にアプリケーションを徹底的にテストして、一貫した動作を確保する

詳細については、「[環境変数とその他のソフトウェアの設定](environments-cfg-softwaresettings.md)」を参照してください。

## Tomcat 設定の名前空間
<a name="java-tomcat-namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクを実行できます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、*名前空間*に整理されています。

Tomcat プラットフォームでは、[すべての Elastic Beanstalk 環境でサポートされるオプション](command-options-general.md)に加えて、以下の名前空間のオプションがサポートされます。
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions` – JVM 設定を変更します。この名前空間のオプションは、次のように管理コンソールのオプションに対応します。
  + `Xms` – **JVM コマンドラインオプション**
  + `JVM Options` – **JVM コマンドラインオプション**
+ `aws:elasticbeanstalk:environment:proxy` – 環境のプロキシサーバーを選択します。

次の例の設定ファイルは、Tomcat 固有の設定オプションの使用を示しています。

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:tomcat:jvmoptions:
    Xms: 512m
    JVM Options: '-Xmn128m'
  aws:elasticbeanstalk:application:environment:
    API_ENDPOINT: mywebapi.zkpexsjtmd.us-west-2.elasticbeanstalk.com
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については、「[設定オプション](command-options.md)」を参照してください。

## Amazon Linux AMI (Amazon Linux 2 以前の) Tomcat プラットフォーム
<a name="tomcat.alami"></a>

Elastic Beanstalk Tomcat 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報をお読みください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### Tomcat 設定ネームスペース — Amazon Linux AMI (AL1)
<a name="tomcat.alami.namespaces"></a>

Tomcat Amazon Linux AMI プラットフォームは、次の名前空間で追加オプションをサポートしています。
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions` – このページで前述したこの名前空間のオプションに加えて、以前の Amazon Linux AMI プラットフォームバージョンでは以下もサポートされています。
  + `XX:MaxPermSize` – **JVM のパーマネント領域の最大サイズ**
+ `aws:elasticbeanstalk:environment:proxy` – プロキシサーバーの選択に加えて、レスポンスの圧縮も設定します。

次の例の設定ファイルは、プロキシ名前空間の設定オプションの使用を示しています。

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    GzipCompression: 'true'
    ProxyServer: nginx
```

### Elastic Beanstalk 設定ファイルを含める — Amazon Linux AMI (AL1)
<a name="java-tomcat-ebextensions"></a>

`.ebextensions` 設定ファイルをデプロイするには、アプリケーションソースに含めます。単一のアプリケーションについては、次のコマンドを実行して、圧縮された WAR ファイルに `.ebextensions` を追加します。

**Example**  

```
zip -ur your_application.war .ebextensions
```

複数の WAR ファイルを必要とするアプリケーションの場合は、詳細な手順について、「[Tomcat 環境用に複数の WAR ファイルをバンドルする](java-tomcat-multiple-war-files.md)」を参照してください。

# Tomcat 環境用に複数の WAR ファイルをバンドルする
<a name="java-tomcat-multiple-war-files"></a>

ウェブアプリが複数のウェブアプリケーションコンポーネントで構成されている場合は、コンポーネントごとに別の環境を実行する代わりに 1 つの環境でコンポーネントを実行してデプロイを簡素化し、運用コストを減らすことができます。この戦略は、多くのリソースを必要としない軽量のアプリケーションや、開発環境およびテスト環境で有効です。

環境に複数のウェブアプリケーションをデプロイするには、各コンポーネントのウェブアプリケーションアーカイブ (WAR) ファイルを 1 つの[ソースバンドル](applications-sourcebundle.md)に組み合わせます。

複数の WAR ファイルを含むアプリケーションソースバンドルを作成するには、次の構造を使用して WAR ファイルを整理します。

```
MyApplication.zip
├── .ebextensions
├── .platform
├── foo.war
├── bar.war
└── ROOT.war
```

複数の WAR ファイルを含むソースバンドルを AWS Elastic Beanstalk 環境にデプロイすると、各アプリケーションはルートドメイン名の異なるパスからアクセスできます。前述の例には、`foo`、`bar`、`ROOT` の 3 つのアプリケーションが含まれています。`ROOT.war` は、ルートドメインでアプリケーションを実行するように Elastic Beanstalk に指示する特殊なファイル名です。したがって、これら 3 つのアプリケーションには `http://MyApplication.elasticbeanstalk.com/foo`、`http://MyApplication.elasticbeanstalk.com/bar`、`http://MyApplication.elasticbeanstalk.com` でアクセスできます。

ソースバンドルには、WAR ファイル、オプションの `.ebextensions` フォルダ、およびオプションの `.platform` フォルダを含めることができます。これらのオプションの設定フォルダの詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

**環境を起動するには（コンソール）**

1. この事前に設定されたリンク: [console.aws.amazon.com/elasticBeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced) を使用して、Elastic Beanstalk コンソールを開きます。

1. [**プラットフォーム**] で、アプリケーションで使用される言語に一致するプラットフォームとプラットフォームブランチか、コンテナベースアプリケーション用の Docker プラットフォームを選択します。

1. [**アプリケーションコード**] で、[**コードのアップロード**] を選択します。

1. **ローカルファイル** を選択し、[**Choose file (ファイルの選択)**] を選択して、ソースバンドルを開きます。

1. **確認と起動** を選択します。

1. 使用できる設定を確認し、**アプリの作成** を選択します。

ソースバンドルの作成の詳細については、「[Elastic Beanstalk アプリケーションソースバンドルを作成する](applications-sourcebundle.md)」を参照してください。

# プロジェクトフォルダーを構築する
<a name="java-tomcat-platform-directorystructure"></a>

Tomcat サーバーにデプロイされた場合に機能するように、コンパイルされた Java プラットフォーム Enterprise Edition (*Java EE*) ウェブアプリケーションアーカイブ (WAR ファイル) は、特定の[ガイドライン](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm)に従って構築される必要があります。プロジェクトのディレクトリが同じ基準を満たす必要はありませんが、同じ方法でプロジェクトのディレクトリを構築し、コンパイルやパッケージングを簡素化することが推奨されます。WAR ファイルコンテンツなどのプロジェクトフォルダを構築すると、ファイルがどのように関連付けられていて、ウェブサーバーでどのように動作するかを理解するのにも役立ちます。

次の推奨階層では、ウェブアプリケーションのソースコードは、[`src`] ディレクトリに配置され、構築スクリプトや構築スクリプトが生成する WAR ファイルから隔離されます。

```
~/workspace/my-app/
|-- build.sh            - Build script that compiles classes and creates a WAR
|-- README.MD           - Readme file with information about your project, notes
|-- ROOT.war            - Source bundle artifact created by build.sh
`-- src                 - Source code folder
    |-- WEB-INF         - Folder for private supporting files
    |   |-- classes     - Compiled classes
    |   |-- lib         - JAR libraries
    |   |-- tags        - Tag files
    |   |-- tlds        - Tag Library Descriptor files
    |   `-- web.xml     - Deployment Descriptor
    |-- com             - Uncompiled classes
    |-- css             - Style sheets
    |-- images          - Image files
    |-- js              - JavaScript files
    `-- default.jsp     - JSP (JavaServer Pages) webpage
```

[`src`] フォルダの内容は、サーバーにパッケージングしてデプロイする内容と一致します（[`com`] フォルダは例外です）。`com` フォルダには、コンパイルされていないクラス (`.java` ファイル) が含まれます。これらをコンパイルし、アプリケーションコードからアクセスできるように `WEB-INF/classes` ディレクトリに配置する必要があります。

`WEB-INF` ディレクトリには、ウェブサーバー上でパブリックに動作しないコードや設定が含まれます。ソースディレクトリのルートの他のフォルダ (`css`、`images`、`js`) はウェブサーバー上の対応するパスで一般公開されます。

次の例は、前述のプロジェクトディレクトリと同一ですが、ファイルとサブディレクトリの数が多い点のみが異なります。このプロジェクト例には、シンプルなタグ、モデル、サポートクラス、さらに `record` リソースのための Java サーバーページ（JSP）が含まれます。さらに、[Bootstrap](http://getbootstrap.com/) 用のスタイルシートと JavaScript、デフォルトの JSP ファイル、および 404 エラーのエラーページが含まれます。

[`WEB-INF/lib`] には、PostgreSQL の Java Database Connectivity(JDBC) ドライバを含む Java アーカイブ (JAR) ファイルが含まれます。クラスファイルがまだコンパイルされていないため、[`WEB-INF/classes`] は空です。

```
~/workspace/my-app/
|-- build.sh
|-- README.MD
|-- ROOT.war
`-- src
    |-- WEB-INF
    |   |-- classes
    |   |-- lib
    |   |   `-- postgresql-9.4-1201.jdbc4.jar
    |   |-- tags
    |   |   `-- header.tag
    |   |-- tlds
    |   |   `-- records.tld
    |   `-- web.xml
    |-- com
    |   `-- myapp
    |       |-- model
    |       |   `-- Record.java
    |       `-- web
    |           `-- ListRecords.java
    |-- css
    |   |-- bootstrap.min.css
    |   `-- myapp.css
    |-- images
    |   `-- myapp.png
    |-- js
    |   `-- bootstrap.min.js
    |-- 404.jsp
    |-- default.jsp
    `-- records.jsp
```

## シェルスクリプトを使用して WAR ファイルを構築する
<a name="java-tomcat-platform-directorystructure-building"></a>

[`build.sh`] は、Java クラスをコンパイルする非常にシンプルなシェルスクリプトです。また、WAR ファイルを構築してローカルテストのために Tomcat の [`webapps`] ディレクトリにコピーします。

```
cd src
javac -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java

jar -cvf ROOT.war *.jsp images css js WEB-INF
cp ROOT.war /Library/Tomcat/webapps
mv ROOT.war ../
```

WAR ファイルでは、前述の例の [`src`] ディレクトリ ([`src/com`] フォルダを除きます) に存在する同じストラクチャを探します。`jar` コマンドは自動的に `META-INF/MANIFEST.MF` ファイルを作成します。

```
~/workspace/my-app/ROOT.war
|-- META-INF
|   `-- MANIFEST.MF
|-- WEB-INF
|   |-- classes
|   |   `-- com
|   |       `-- myapp
|   |           |-- model
|   |           |   `-- Records.class
|   |           `-- web
|   |               `-- ListRecords.class
|   |-- lib
|   |   `-- postgresql-9.4-1201.jdbc4.jar
|   |-- tags
|   |   `-- header.tag
|   |-- tlds
|   |   `-- records.tld
|   `-- web.xml
|-- css
|   |-- bootstrap.min.css
|   `-- myapp.css
|-- images
|   `-- myapp.png
|-- js
|   `-- bootstrap.min.js
|-- 404.jsp
|-- default.jsp
`-- records.jsp
```

## `.gitignore` を使用する
<a name="java-tomcat-platform-gitignore"></a>

コンパイルされたクラスファイルと WAR ファイルが Git レポジトリにコミットされる、または Git コマンドの実行時にこれらのファイルに関するメッセージが表示されることを防ぐため、プロジェクトフォルダの `.gitignore` という名前のファイルに関連ファイルタイプを追加します。

**\$1/workspace/myapp/.gitignore**

```
*.zip
*.class
```

# プロキシサーバーを設定します
<a name="java-tomcat-proxy"></a>

Tomcat プラットフォームはリバースプロキシとして [nginx](https://www.nginx.com/) (デフォルト) または [Apache HTTP Server](https://httpd.apache.org/) を使用し、インスタンスのポート 80 から、ポート 8080 でリッスンしている Tomcat ウェブコンテナにリクエストを中継します。Elastic Beanstalk では、デフォルトのプロキシ設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

**ご使用のプラットフォームバージョンでプロキシサーバーを設定する**  
すべての AL2023/AL2 プラットフォームでは、統一されたプロキシ設定機能がサポートされています。AL2023/AL2 を実行中のプラットフォームバージョンでプロキシサーバーを設定する方法の詳細については、「[リバースプロキシの設定](platforms-linux-extend.proxy.md)」を参照してください。

## (Amazon Linux 2 より前の) Amazon Linux AMI Tomcat プラットフォームでのプロキシの設定
<a name="java-tomcat-proxy.alami"></a>

Elastic Beanstalk Tomcat 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報をお読みください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### Tomcat 環境のプロキシサーバーの選択 — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy.alami"></a>

(Amazon Linux 2 より前の) Amazon Linux AMI に基づく Tomcat プラットフォームバージョンは、デフォルトでプロキシに [Apache 2.4](https://httpd.apache.org/docs/2.4/) を使用します。ソースコードに[設定ファイル](ebextensions.md)を含めることにより、[Apache 2.2](https://httpd.apache.org/docs/2.2/) または [nginx](https://www.nginx.com/) を使用する選択ができます。次の例では、nginx が使用されるように Elastic Beanstalk を設定しています。

**Example .ebextensions/nginx-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: nginx
```

### Apache 2.2 から Apache 2.4 への移行 — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy-apache-migrate"></a>

[Apache 2.2](https://httpd.apache.org/docs/2.2/) 向けに開発されたアプリケーションがある場合、[Apache 2.4](https://httpd.apache.org/docs/2.4/) への移行について理解するには、このセクションをお読みください。

[Java with Tomcat プラットフォームの更新 (2018 年 5 月 24 日)](https://aws.amazon.com/releasenotes/release-aws-elastic-beanstalk-platform-update-for-the-java-with-tomcat-platform-on-may-24-2018/) とともにリリースされた Tomcat プラットフォームバージョン 3.0.0 の以降の設定では、Tomcat プラットフォームのデフォルトのプロキシは Apache 2.4 です。Apache 2.4 の `.conf` ファイルは、Apache 2.2 のものと完全な下位互換性がありません。Elastic Beanstalk には、各 Apache バージョンで正しく動作するデフォルトの `.conf` ファイルが 1 つ含まれています。「[デフォルトの Apache 設定の拡張および上書き — Amazon Linux AMI (AL1)](#java-tomcat-proxy-apache)」で説明されているように、アプリケーションが Apache の設定をカスタマイズしない場合は、Apache 2.4 への移行は問題ありません。

アプリケーションが Apache の設定を拡張または上書きする場合は、Apache 2.4 に移行するためにいくつかの変更を加える必要があります。詳細は、*Apache Software Foundation* サイトの [2.2 から 2.4 へのアップグレード](https://httpd.apache.org/docs/current/upgrading.html)を参照してください。Apache 2.4 への移行が正常に完了するまで、一時的な対策として、次の[設定ファイル](ebextensions.md)をソースコードに含めることで、アプリケーションで Apache 2.2 を使用することができます。

**Example .ebextensions/apache-legacy-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache/2.2
```

簡単に修正するには、Elastic Beanstalk コンソールでプロキシサーバーを選択することもできます。

**Elastic Beanstalk コンソールで Tomcat 環境にプロキシを選択するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**プロキシサーバー**] を選択し、[`Apache 2.2 (deprecated)`] を選択します。

1. ページの最下部で **[適用]** を選択し変更を保存します。

![\[Elastic Beanstalk コンソールのソフトウェア設定カテゴリで Tomcat 環境のプロキシを選択する\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/java-tomcat-proxy-selection.png)


### デフォルトの Apache 設定の拡張および上書き — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy-apache"></a>

追加の設定ファイルを使用して、Elastic Beanstalk のデフォルト Apache 設定を拡張できます。または、Elastic Beanstalk のデフォルトの Apache 設定を完全に上書きすることもできます。

**注記**  
すべての Amazon Linux 2 プラットフォームでは、統一されたプロキシ設定の特徴が support されています。Amazon Linux 2 を実行中の Tomcat プラットフォームバージョンでプロキシサーバーを設定する方法の詳細については、「[リバースプロキシの設定](platforms-linux-extend.proxy.md)」を参照してください。
Elastic Beanstalk アプリケーションを Amazon Linux 2 プラットフォームに移行する場合は、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」の情報も必ずお読みください。

Elastic Beanstalk のデフォルトの Apache 設定を拡張するには、アプリケーションソースバンドルの `.conf` というフォルダに `.ebextensions/httpd/conf.d` 設定ファイルを追加します。Elastic Beanstalk の Apache 設定では、このフォルダに `.conf` ファイルが自動的に含められます。

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd
|      -- conf.d
|         -- myconf.conf
|         -- ssl.conf
-- index.jsp
```

たとえば、次の Apache 2.4 設定では、ポート 5000 にリスナーを追加します。

**Example .ebextensions/httpd/conf.d/port5000.conf**  

```
listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
```

Elastic Beanstalk のデフォルトの Apache 設定を完全に上書きするには、ソースバンドルの `.ebextensions/httpd/conf/httpd.conf` に設定を含めます。

```
~/workspace/my-app/
|-- .ebextensions
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.jsp
```

Elastic Beanstalk の Apache 設定を上書きするには、`httpd.conf` に以下の行を追加することにより、[Elastic Beanstalk の拡張ヘルスレポートおよびモニタリング](health-enhanced.md)、レスポンスの圧縮、および静的ファイルに関して Elastic Beanstalk の設定を適用します。

```
IncludeOptional conf.d/*.conf
IncludeOptional conf.d/elasticbeanstalk/*.conf
```

お使いの環境で Apache 2.2 をプロキシとして使用している場合は、`IncludeOptional` ディレクティブを `Include` に置き換えます。2 つの Apache バージョンにおけるこれら 2 つのディレクティブの動作の詳細については、[Include in Apache 2.4](https://httpd.apache.org/docs/2.4/mod/core.html#include)、[IncludeOptional in Apache 2.4](https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional)、および [Include in Apache 2.2](https://httpd.apache.org/docs/2.2/mod/core.html#include) を参照してください。

**注記**  
ポート 80 のデフォルトのリスナーを上書きするには、`00_application.conf` というファイルを `.ebextensions/httpd/conf.d/elasticbeanstalk/` に含めて Elastic Beanstalk の設定を上書きします。

実例については、環境内のインスタンスの `/etc/httpd/conf/httpd.conf` にある Elastic Beanstalk のデフォルト設定ファイルを参照してください。ソースバンドルの `.ebextensions/httpd` フォルダのすべてのファイルは、デプロイ中に `/etc/httpd` にコピーされます。

### デフォルトの nginx 設定の拡張および上書き — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy-nginx"></a>

Elastic Beanstalk のデフォルトの nginx 設定を拡張するには、アプリケーションソースバンドル内の `.conf` というフォルダに `.ebextensions/nginx/conf.d/` 設定ファイルを追加します。Elastic Beanstalk の nginx 設定では、このフォルダに `.conf` ファイルが自動的に含められます。

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           |-- elasticbeanstalk
|           |   `-- my-server-conf.conf
|           `-- my-http-conf.conf
`-- index.jsp
```

`conf.d` フォルダの拡張子が .conf であるファイルが、デフォルト設定の `http` ブロックに含まれます。`conf.d/elasticbeanstalk` フォルダのファイルは、`server` ブロック内の `http` ブロックに含まれます。

Elastic Beanstalk のデフォルトの nginx 設定を完全に上書きするには、ソースバンドルの `.ebextensions/nginx/nginx.conf` に設定を含めます。

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- nginx.conf
`-- index.jsp
```

**注意事項**  
Elastic Beanstalk の nginx 設定を上書きするには、設定の `server` ブロックに以下の行を追加することにより、ポート 80 のリスナー、レスポンスの圧縮、および静的ファイルに関して Elastic Beanstalk の設定を適用します。  

  ```
   include conf.d/elasticbeanstalk/*.conf;
  ```
ポート 80 のデフォルトのリスナーを上書きするには、`00_application.conf` というファイルを `.ebextensions/nginx/conf.d/elasticbeanstalk/` に含めて Elastic Beanstalk の設定を上書きします。
また、設定の `http` ブロックに以下の行を含めることにより、[Elastic Beanstalk の拡張ヘルスレポートおよびモニタリング](health-enhanced.md) およびログ記録に関して Elastic Beanstalk の設定を適用します。  

  ```
      include       conf.d/*.conf;
  ```

実例については、環境内のインスタンスの `/etc/nginx/nginx.conf` にある Elastic Beanstalk のデフォルト設定ファイルを参照してください。ソースバンドルの `.ebextensions/nginx` フォルダのすべてのファイルは、デプロイ中に `/etc/nginx` にコピーされます。

# Elastic Beanstalk Java SE プラットフォームの使用
<a name="java-se-platform"></a>

このトピックでは、Java SE プラットフォームで実行される AWS Elastic Beanstalk Java アプリケーションを設定、構築、実行する方法について説明します。

Elastic Beanstalk Java SE プラットフォームは、コンパイルされた JAR ファイルから独自に Java ウェブアプリケーションを実行するための[プラットフォームバージョン](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.javase)のセットです。インスタンス内でコンパイルするには、アプリケーションをローカルでコンパイルするか、ビルドスクリプトを使用してソースコードをアップロードします。Java SE プラットフォームバージョンはプラットフォームブランチにグループ化され、各ブランチは Java の 1 つのメジャーバージョンに対応します。

**注記**  
Elastic Beanstalk では、アプリケーションの JAR ファイルの解析は行われません。Elastic Beanstalk に必要なファイルは、JAR ファイルの外部に保存します。たとえば、[ワーカー環境](using-features-managing-env-tiers.md)の `cron.yaml` ファイルはアプリケーションのソースバンドルのルート (JAR ファイルの横) に含めます。

設定オプションは[実行中の環境の設定を変更するために](environment-configuration-methods-after.md) Elastic Beanstalk コンソールで利用できます。環境を終了したときにその設定が失われないようにするため、[保存済み設定](environment-configuration-savedconfig.md)を使用して設定を保存し、それを後で他の環境に適用することができます。

ソースコードの設定を保存する場合、[設定ファイル](ebextensions.md)を含めることができます。設定ファイルの設定は、環境を作成するたびに、またはアプリケーションをデプロイするたびに適用されます。設定ファイルを使用して、デプロイの間にパッケージをインストールしたり、スクリプトを実行したり、他のインスタンスのカスタマイズオペレーションを実行することもできます。

Elastic Beanstalk Java SE プラットフォームには、リバースプロキシとして機能する [nginx](https://www.nginx.com/) サーバーが含まれています。このサーバーは、キャッシュ型静的コンテンツを提供し、アプリケーションにリクエストを渡します。このプラットフォームには、アプリケーションの負荷を減らすため、ソースコードのフォルダから静的アセットに対応するようプロキシサーバーを設定する設定オプションが用意されています。高度なシナリオでは、ソースバンドルに[独自の .conf ファイルを含めて](java-se-nginx.md) Elastic Beanstalk のプロキシ設定を拡張するか、これを完全に上書きできます。

アプリケーションソースに (ソースバンドル内ではなく、単独で) 単一の JAR ファイルだけを提供した場合は、JAR ファイルの名前が Elastic Beanstalk によって `application.jar` に変更され、`java -jar application.jar` を使用して実行されます。環境でサーバーインスタンスを実行するプロセスを設定するには、オプションの [Procfile](java-se-procfile.md) をソースバンドルに含めます。ソースバンドルのルートに JAR が 2 つ以上ある場合、または java コマンドをカスタマイズして JVM オプションを設定する場合は `Procfile` が必要です。

ソースバンドルには、アプリケーションとともに常に `Procfile` を指定することをお勧めします。このようにして、アプリケーションに対して Elastic Beanstalk が実行するプロセスと、これらのプロセスが受け取る引数を正確に制御できます。

Java クラスをコンパイルし、デプロイ時に環境内の EC2 インスタンスでの他のビルドコマンドを実行するには、アプリケーションバンドルに [Buildfile](java-se-buildfile.md) を含めます。`Buildfile` により、JAR をローカルにコンパイルする代わりに、ソースコードをそのままデプロイしてサーバー上に構築できます。Java SE プラットフォームには、サーバー上でのビルドを可能にする共通ビルドツールが含まれます。

Elastic Beanstalk Linux ベースのプラットフォームを拡張するさまざまな方法の詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

## Java SE 環境を設定する
<a name="java-se-options"></a>

Java SE プラットフォーム設定では、Amazon EC2 インスタンスの動作を微調整できます。Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境の Amazon EC2 インスタンス設定を編集できます。

Elastic Beanstalk コンソールを使用して、Amazon S3 へのログローテーションを有効にでき、アプリケーションが環境から読むことができる変数を設定します。

**Elastic Beanstalk コンソールで Java SE 環境を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

### ログオプション
<a name="java-se-options-logs"></a>

[Log Options (ログオプション)] セクションには、2 つの設定があります。
+ **インスタンスプロファイル** – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。
+ **[Enable log file rotation to Amazon S3]** (Amazon S3 へのログファイルのローテーションの有効化) - アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

### 静的ファイル
<a name="java-se-options-staticfiles"></a>

パフォーマンスを向上させるために、**[Static files]** (静的ファイル) セクションを使用して、ウェブアプリケーション内のディレクトリセットから静的ファイル (HTML、イメージなど) を配信するようにプロキシサーバーを設定することができます。ディレクトリごとに、仮想パスをディレクトリマッピングに設定します。プロキシサーバーは、指定されたパスのファイルに対するリクエストを受け取ると、アプリケーションにリクエストをルーティングする代わりにファイルを直接　　処理します。

設定ファイルまたは、Elastic Beanstalk コンソールを使用した静的ファイルの設定の詳細については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

### 環境プロパティ
<a name="java-se-options-properties"></a>

**環境プロパティ** セクションでは、アプリケーションを実行している Amazon EC2 インスタンスの環境設定を指定できます。環境プロパティは、キーと値のペアでアプリケーションに渡されます。

Elastic Beanstalk で実行される Java SE 環境内では、`System.getenv()` 関数を使用して環境変数にアクセスできます。たとえば、次のコードを使用して変数に `API_ENDPOINT` という名前のプロパティを読み取ることができます。

```
String endpoint = System.getenv("API_ENDPOINT");
```

詳細については、「[環境変数とその他のソフトウェアの設定](environments-cfg-softwaresettings.md)」を参照してください。

## Java SE 設定の名前空間
<a name="java-se-namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクを実行できます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

Java SE プラットフォームは、プラットフォーム固有の名前空間を定義しません。`aws:elasticbeanstalk:environment:proxy:staticfiles` 名前空間を使用して、静的ファイルを配信するようにプロキシを設定できます。詳細と例については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については、「[設定オプション](command-options.md)」を参照してください。

## (Amazon Linux 2 より前の) Amazon Linux AMI Java SE プラットフォーム
<a name="java-se.alami"></a>

Elastic Beanstalk Java SE 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報をお読みください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### Java SE ネームスペース — Amazon Linux AMI (AL1)
<a name="java-se.alami.namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクをパフォーマンスできます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

Java SE プラットフォームは、[すべてのプラットフォームでサポートされる名前空間](command-options-general.md)の他に、プラットフォーム固有の設定の名前空間を 1 つサポートします。名前空間 `aws:elasticbeanstalk:container:java:staticfiles` により、ウェブアプリケーションのパスを、静的コンテンツを含むアプリケーションソースバンドルのフォルダにマッピングするオプションを定義できます。

たとえば、この [option\$1settings](ebextensions-optionsettings.md) スニペットは、静的ファイルの名前空間で 2 つのオプションを定義します。1 つめのオプションはパス `/public` を [`public`] というフォルダに、2 つめのオプションはパス `/images` を [`img`] というフォルダにマッピングします。

```
option_settings:
  aws:elasticbeanstalk:container:java:staticfiles:
    /html: statichtml
    /images: staticimages
```

この名前空間を使用してマッピングされるフォルダは、ソースバンドルのルートに実際に存在するフォルダであることが必要です。パスを JAR ファイルのフォルダにマッピングすることはできません。

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

# Buildfile で JARs on-server を構築する
<a name="java-se-buildfile"></a>

ソースバンドルの [`Buildfile`] ファイルからビルドコマンドを起動することで、環境内の EC2 インスタンスにアプリケーションのクラスファイルと JAR を構築できます。

`Buildfile` のコマンドは 1 回のみ実行され、完了後に終了される必要があります。一方、[Procfile](java-se-procfile.md) のコマンドは、アプリケーションが有効な間は継続的に実行される必要があり、終了された場合には再起動されます。アプリケーションで JAR を実行するには、`Procfile` を使用します。

`Buildfile` の配置と構文の詳細については、「[ビルドファイルと Procfile](platforms-linux-extend.build-proc.md)」を参照してください。

以下の `Buildfile` の例は、Apache Maven を実行してソースコードからウェブアプリケーションを構築しています。この機能を使用するサンプルアプリケーションについては、[Java ウェブアプリケーション例](java-getstarted.md#java-getstarted-samples)を参照してください。

**Example [Buildfile]**  

```
build: mvn assembly:assembly -DdescriptorId=jar-with-dependencies
```

Java SE プラットフォームには、ビルドスクリプトから起動できる次のビルドツールが含まれます。
+ `javac` – Java コンパイラー
+ `ant` – Apache Ant
+ `mvn` – Apache Maven
+ `gradle` – Gradle

# [Procfile] でアプリケーションプロセスを設定します
<a name="java-se-procfile"></a>

アプリケーションソースバンドルのルートに JAR ファイルが複数ある場合は、どの JAR を実行するかを Elastic Beanstalk に伝える `Procfile` ファイルを含める必要があります。単一の JAR アプリケーション用の [`Procfile`] ファイルを含め、アプリケーションを実行する Java 仮想マシン（JVM）を設定することもできます。

ソースバンドルには、アプリケーションとともに常に `Procfile` を指定することをお勧めします。このようにして、アプリケーションに対して Elastic Beanstalk が実行するプロセスと、これらのプロセスが受け取る引数を正確に制御できます。

`Procfile` の書き込みと使用の詳細については、「[ビルドファイルと Procfile](platforms-linux-extend.build-proc.md)」を参照してください。

**Example [Procfile]**  

```
web: java -Xms256m -jar server.jar 
cache: java -jar mycache.jar
web_foo: java -jar other.jar
```

アプリケーション内の主要な JAR を実行するコマンドは、[`web`] と呼ばれ、`Procfile` 内のコマンドリストの最初に記載されている必要があります。nginx サーバーは、環境のロードバランサーから受信するすべての HTTP リクエストをアプリケーションに転送します。

Elastic Beanstalk は、Procfile 内のすべてのエントリが常に実行されている必要があるとみなし、Procfile に定義されたアプリケーションが終了した場合には自動的に再起動します。終了後に再起動の必要がないコマンドを実行するには、[`Buildfile`](java-se-buildfile.md) を使用します。

## (Amazon Linux 2 より前の) Amazon Linux AMI での Procfile の使用
<a name="java-se-procfile.alami"></a>

Elastic Beanstalk Java SE 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報をお読みください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### ポートパッシング — Amazon Linux AMI (AL1)
<a name="java-se-procfile.alami.ports"></a>

デフォルトでは、Elastic Beanstalk はポート 5000 でアプリケーションにリクエストを送信するように nginx プロキシを設定します。デフォルトのポートを上書きするには、`PORT` [環境プロパティ](java-se-platform.md#java-se-options)を、主要なアプリケーションがリッスンするポートに設定します。

`Procfile` を使用して複数のアプリケーションを実行する場合、Amazon Linux AMI プラットフォームバージョン上の Elastic Beanstalk では、各アプリケーションがリッスンするポートとして、1 つ前のアプリケーションのポート番号に 100 を加算した番号のポートが想定されます。各アプリケーション内からアクセス可能な PORT 変数には、そのアプリケーションの実行が予想されるポート番号が Elastic Beanstalk によって設定されます。`System.getenv("PORT")` を呼び出すことで、アプリケーションコード内のこの変数にアクセスできます。

以前の `Procfile` 例では、`web` アプリケーションはポート 5000 を、`cache` はポート 5100 を、`web_foo` はポート 5200 をリッスンします。[`web`] は、`PORT` 変数を読み取ることでリスニングポートを設定し、ポート番号に 100 を足して [`cache`] がリッスンしているポートを決定し、リクエストを送信します。

# プロキシサーバーを設定します
<a name="java-se-nginx"></a>

Elastic Beanstalk は、リバースプロキシとして [nginx](https://www.nginx.com/) を使用し、ポート 80 の Elastic Load Balancing ロードバランサーにアプリケーションをマッピングします。Elastic Beanstalk では、デフォルトの nginx 設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

デフォルトでは、Elastic Beanstalk はポート 5000 でアプリケーションにリクエストを送信するように nginx プロキシを設定します。デフォルトのポートを上書きするには、`PORT` [環境プロパティ](java-se-platform.md#java-se-options)を、主要なアプリケーションがリッスンするポートに設定します。

**注記**  
アプリケーションがリッスンしているポートは、ロードバランサーからリクエストを受信するために nginx サーバーがリッスンするポートに影響を与えません。

**ご使用のプラットフォームバージョンでプロキシサーバーを設定する**  
すべての AL2023/AL2 プラットフォームでは、統一されたプロキシ設定機能がサポートされています。AL2023/AL2 を実行中のプラットフォームバージョンでプロキシサーバーを設定する方法の詳細については、「[リバースプロキシの設定](platforms-linux-extend.proxy.md)」を参照してください。

## (Amazon Linux 2 より前の) Amazon Linux AMI でのプロキシの設定
<a name="java-se-nginx.alami"></a>

Elastic Beanstalk Java SE 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報をお読みください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### デフォルトのプロキシ設定の拡張および上書き — Amazon Linux AMI (AL1)
<a name="java-se-nginx.alami.extending"></a>

Elastic Beanstalk のデフォルトの nginx 設定を拡張するには、アプリケーションソースバンドル内の `.conf` というフォルダに `.ebextensions/nginx/conf.d/` 設定ファイルを追加します。Elastic Beanstalk の nginx 設定では、このフォルダに `.conf` ファイルが自動的に含められます。

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- web.jar
```

Elastic Beanstalk のデフォルトの nginx 設定を完全に上書きするには、ソースバンドルの `.ebextensions/nginx/nginx.conf` に設定を含めます。

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- nginx.conf
`-- web.jar
```

Elastic Beanstalk の nginx 設定を上書きするには、`nginx.conf` に以下の行を追加することにより、[Elastic Beanstalk の拡張ヘルスレポートおよびモニタリング](health-enhanced.md)、自動アプリケーションマッピング、および静的ファイルに関して Elastic Beanstalk の設定を適用します。

```
 include conf.d/elasticbeanstalk/*.conf;
```

以下に示す [Scorekeep サンプルアプリケーション](https://github.com/aws-samples/eb-java-scorekeep/)の設定例では、Elastic Beanstalk のデフォルトの設定をオーバーライドし、`public` の `/var/app/current`サブディレクトリにある静的ウェブアプリケーションを処理します。このサブディレクトリは、Java SE プラットフォームによってアプリケーションのソースコードがコピーされる場所です。`/api` の場所は、`/api/` のルートへのトラフィックを、ポート 5000 でリッスンしている Spring アプリケーションに転送します。他のすべてのトラフィックは、ルートパスでウェブアプリによって処理されます。

**Example**  

```
user                    nginx;
error_log               /var/log/nginx/error.log warn;
pid                     /var/run/nginx.pid;
worker_processes        auto;
worker_rlimit_nofile    33282;

events {
    worker_connections  1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  include       conf.d/*.conf;

  map $http_upgrade $connection_upgrade {
      default     "upgrade";
  }

  server {
      listen        80 default_server;
      root /var/app/current/public;

      location / {
      }git pull
      

      location /api {
          proxy_pass          http://127.0.0.1:5000;
          proxy_http_version  1.1;

          proxy_set_header    Connection          $connection_upgrade;
          proxy_set_header    Upgrade             $http_upgrade;
          proxy_set_header    Host                $host;
          proxy_set_header    X-Real-IP           $remote_addr;
          proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
      }

      access_log    /var/log/nginx/access.log main;

      client_header_timeout 60;
      client_body_timeout   60;
      keepalive_timeout     60;
      gzip                  off;
      gzip_comp_level       4;

      # Include the Elastic Beanstalk generated locations
      include conf.d/elasticbeanstalk/01_static.conf;
      include conf.d/elasticbeanstalk/healthd.conf;
  }
}
```

# Amazon RDS DB インスタンスを Java Elastic Beanstalk 環境に追加する
<a name="java-rds"></a>

このトピックでは、Elastic Beanstalk コンソールを使用して Amazon RDS を作成する手順について説明します。アプリケーションで収集または変更したデータを保存するには、Amazon Relational Database Service (Amazon RDS) DB インスタンスを使用します。データベースは、Elastic Beanstalk でお客様の環境にアタッチして管理したり、外部で作成して管理したりできます。

初めて Amazon RDS を使用する場合は、Elastic Beanstalk コンソールを使用してテスト環境に DB インスタンスを追加し、そのインスタンスにアプリケーションから接続できることを確認します。

**お客様の環境に DB インスタンスを追加するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. [**データベース**] 設定カテゴリで、[**編集**] を選択します。

1. DB エンジンを選択して、ユーザー名とパスワードを入力します。

1. ページの最下部で **[適用]** を選択し変更を保存します。

DB インスタンスの追加には約 10 分かかります。環境の更新が完了すると、DB インスタンスのホスト名とその他の接続情報は以下の環境プロパティを通じてアプリケーションに使用できるようになります。


| プロパティ名 | 説明 | プロパティ値 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  DB インスタンスのホスト名。  |  Amazon RDS コンソールの [**Connectivity & security (Connectivityとセキュリティ)**] タブ: [**Endpoint (エンドポイント)**]。  | 
|  `RDS_PORT`  |  DB インスタンスが接続を許可するポート。デフォルト値は DB エンジンによって異なります。  |  Amazon RDS コンソールの [**Connectivity & security (接続とセキュリティ)**] タブ: [**Port (ポート)**]。  | 
|  `RDS_DB_NAME`  |  データベース名 **ebdb**。  |  Amazon RDS コンソールの [**Configuration (設定)**] タブ: [**DB Name (DB 名)**]。  | 
|  `RDS_USERNAME`  |  お客様のデータベース用に設定したユーザー名。  |  Amazon RDS コンソールの [**Configuration (設定)**] タブ: [**Master username (マスターユーザー名)**]。  | 
|  `RDS_PASSWORD`  |  お客様のデータベース用に設定したパスワード。  |  Amazon RDS コンソールでは参照できません。  | 

内部 DB インスタンスの設定の詳細については、「[Elastic Beanstalk 環境にデータベースを追加する](using-features.managing.db.md)」を参照してください。Elastic Beanstalk で使用する外部データベースを設定する手順については、「[Amazon RDS で Elastic Beanstalk を使用する](AWSHowTo.RDS.md)」を参照してください。

データベースに接続するには、適切なドライバーの JAR ファイルをアプリケーションに追加して、コードにドライバークラスをロードし、Elastic Beanstalk で提供される環境プロパティを使用して接続オブジェクトを作成します。

**Topics**
+ [

## JDBC ドライバーのダウンロード
](#java-rds-drivers)
+ [

## データベースへの接続 (Java SE プラットフォーム)
](#java-rds-javase)
+ [

## データベースへの接続 (Tomcat プラットフォーム)
](#java-rds-tomcat)
+ [

## データベース接続のトラブルシューティング
](#create_deploy_Java.rds.troubleshooting)

## JDBC ドライバーのダウンロード
<a name="java-rds-drivers"></a>

選択した DB エンジン用の JDBC ドライバーの JAR ファイルが必要になります。JAR ファイルをソースコードに保存し、データベースへの接続を作成するクラスをコンパイルするときのクラスパスに含めます。

以下の場所で DB エンジン用の最新のドライバが見つかります。
+ **MySQL** – [MySQL Connector/J](https://dev.mysql.com/downloads/connector/j/)
+ **Oracle SE-1** – [Oracle JDBC ドライバー](http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)
+ **Postgres** – [PostgreSQL JDBC ドライバー](https://jdbc.postgresql.org/)
+ **SQL Server** – [Microsoft JDBC ドライバー](https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx)

JDBC ドライバーを使用するには、コード内で `Class.forName()` により接続を作成する前に、`DriverManager.getConnection()` を呼び出してそのドライバーをロードします。

JDBC では次の形式の接続文字列が使用されます:

```
jdbc:driver://hostname:port/dbName?user=userName&password=password
```

ホスト名、ポート、データベース名、ユーザー名、パスワードは、Elastic Beanstalk からアプリケーションに提供される環境変数から取得できます。ドライバ名は、データベースタイプとドライババージョンによって異なります。以下はドライバー名の一例です。
+ `mysql` for MySQL
+ `postgresql` for PostgreSQL
+ `oracle:thin`（Oracle Thin）
+ `oracle:oci`（Oracle OCI）
+ `oracle:oci8`（Oracle OCI 8）
+ `oracle:kprb`（Oracle KPRB）
+ `sqlserver`（SQL Server）

## データベースへの接続 (Java SE プラットフォーム)
<a name="java-rds-javase"></a>

Java SE 環境では、`System.getenv()` を使用して環境から接続変数を読み取ります。以下のコード例では、PostgreSQL データベースへの接続を作成するクラスを示しています。

```
private static Connection getRemoteConnection() {
    if (System.getenv("RDS_HOSTNAME") != null) {
      try {
      Class.forName("org.postgresql.Driver");
      String dbName = System.getenv("RDS_DB_NAME");
      String userName = System.getenv("RDS_USERNAME");
      String password = System.getenv("RDS_PASSWORD");
      String hostname = System.getenv("RDS_HOSTNAME");
      String port = System.getenv("RDS_PORT");
      String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;
      logger.trace("Getting remote connection with connection string from environment variables.");
      Connection con = DriverManager.getConnection(jdbcUrl);
      logger.info("Remote connection successful.");
      return con;
    }
    catch (ClassNotFoundException e) { logger.warn(e.toString());}
    catch (SQLException e) { logger.warn(e.toString());}
    }
    return null;
  }
```

## データベースへの接続 (Tomcat プラットフォーム)
<a name="java-rds-tomcat"></a>

Tomcat 環境では、環境プロパティは、`System.getProperty()` でアクセス可能なシステムプロパティとして用意されています。

以下のコード例では、PostgreSQL データベースへの接続を作成するクラスを示しています。

```
private static Connection getRemoteConnection() {
    if (System.getProperty("RDS_HOSTNAME") != null) {
      try {
      Class.forName("org.postgresql.Driver");
      String dbName = System.getProperty("RDS_DB_NAME");
      String userName = System.getProperty("RDS_USERNAME");
      String password = System.getProperty("RDS_PASSWORD");
      String hostname = System.getProperty("RDS_HOSTNAME");
      String port = System.getProperty("RDS_PORT");
      String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;
      logger.trace("Getting remote connection with connection string from environment variables.");
      Connection con = DriverManager.getConnection(jdbcUrl);
      logger.info("Remote connection successful.");
      return con;
    }
    catch (ClassNotFoundException e) { logger.warn(e.toString());}
    catch (SQLException e) { logger.warn(e.toString());}
    }
    return null;
  }
```

接続の取得時や SQL ステートメントの実行時に問題が発生する場合は、JSP ファイルに以下のコードを追加してみることができます。このコードは、DB インスタンスに接続し、テーブルを作成して、そのテーブルに書き込みます。

```
<%@ page import="java.sql.*" %>
<%
  // Read RDS connection information from the environment
  String dbName = System.getProperty("RDS_DB_NAME");
  String userName = System.getProperty("RDS_USERNAME");
  String password = System.getProperty("RDS_PASSWORD");
  String hostname = System.getProperty("RDS_HOSTNAME");
  String port = System.getProperty("RDS_PORT");
  String jdbcUrl = "jdbc:mysql://" + hostname + ":" +
    port + "/" + dbName + "?user=" + userName + "&password=" + password;
  
  // Load the JDBC driver
  try {
    System.out.println("Loading driver...");
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("Driver loaded!");
  } catch (ClassNotFoundException e) {
    throw new RuntimeException("Cannot find the driver in the classpath!", e);
  }

  Connection conn = null;
  Statement setupStatement = null;
  Statement readStatement = null;
  ResultSet resultSet = null;
  String results = "";
  int numresults = 0;
  String statement = null;

  try {
    // Create connection to RDS DB instance
    conn = DriverManager.getConnection(jdbcUrl);
    
    // Create a table and write two rows
    setupStatement = conn.createStatement();
    String createTable = "CREATE TABLE Beanstalk (Resource char(50));";
    String insertRow1 = "INSERT INTO Beanstalk (Resource) VALUES ('EC2 Instance');";
    String insertRow2 = "INSERT INTO Beanstalk (Resource) VALUES ('RDS Instance');";
    
    setupStatement.addBatch(createTable);
    setupStatement.addBatch(insertRow1);
    setupStatement.addBatch(insertRow2);
    setupStatement.executeBatch();
    setupStatement.close();
    
  } catch (SQLException ex) {
    // Handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
  } finally {
    System.out.println("Closing the connection.");
    if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
  }

  try {
    conn = DriverManager.getConnection(jdbcUrl);
    
    readStatement = conn.createStatement();
    resultSet = readStatement.executeQuery("SELECT Resource FROM Beanstalk;");

    resultSet.first();
    results = resultSet.getString("Resource");
    resultSet.next();
    results += ", " + resultSet.getString("Resource");
    
    resultSet.close();
    readStatement.close();
    conn.close();

  } catch (SQLException ex) {
    // Handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
  } finally {
       System.out.println("Closing the connection.");
      if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
  }
%>
```

結果を表示するには、JSP ファイルの HTML 部分の本文に次のコードを挿入します。

```
<p>Established connection to RDS. Read first two rows: <%= results %></p>
```

## データベース接続のトラブルシューティング
<a name="create_deploy_Java.rds.troubleshooting"></a>

**AI アシストによるトラブルシューティングのために Amazon Q Developer CLI を試す**  
 Amazon Q Developer CLI は、環境の問題を迅速にトラブルシューティングするのに役立ちます。Q CLI は、環境ステータスのチェック、イベントの確認、ログの分析、および明確化のための質問を行うことでソリューションを提供します。詳細と詳細なチュートリアルについては、 AWS ブログの[「Amazon Q Developer CLI を使用した Elastic Beanstalk 環境のトラブルシューティング](https://aws.amazon.com/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/)」を参照してください。

アプリケーションからデータベースへの接続で問題が発生する場合は、ウェブコンテナのログとデータベースを確認します。

### ログを確認する
<a name="create_deploy_Java.rds.troubleshooting.logs"></a>

Elastic Beanstalk 環境のすべてのログは、Eclipse 内から表示できます。 AWS Explorer ビューが開いていない場合は、ツールバーのオレンジ色の AWS アイコンの横にある矢印を選択し、** AWS Explorer ビューを表示**を選択します。[**AWS Elastic Beanstalk**] および環境名を展開し、サーバーのコンテキストメニューを開きます (右クリック)。[**Open in WTP Server Editor**] を選択します。

 [**Server**] ビューの [**Log**] タブを選択し、環境の集計ログを表示します。最新のログを開くには、ページ右上の [**Refresh**] ボタンを選択します。

 下にスクロールし、`/var/log/tomcat7/catalina.out` 内の Tomcat ログを探します。これまでの例で何回かウェブページを読み込んだ場合は、次のように表示されることがあります。

```
-------------------------------------
/var/log/tomcat7/catalina.out
-------------------------------------
INFO: Server startup in 9285 ms
Loading driver...
Driver loaded!
SQLException: Table 'Beanstalk' already exists
SQLState: 42S01
VendorError: 1050
Closing the connection.
Closing the connection.
```

ウェブアプリケーションが標準出力に送信するすべての情報は、ウェブコンテナのログに表示されます。前の例では、アプリケーションは、ページが読み込まれるたびにテーブルを作成しようとします。これにより、最初のページ以降のすべてのページのロード時に SQL 例外が捕捉されます。

上記は例としては問題ありません。ただし、実際のアプリケーションでは、データベース定義をスキーマオブジェクトに保持して、モデルクラス内からトランザクションを実行し、コントローラーサーブレットによってリクエストを調整します。

### RDS DB インスタンスに接続する
<a name="create_deploy_Java.rds.troubleshooting.connecting"></a>

 MySQL クライアントアプリケーションを使用すると、Elastic Beanstalk 環境内の RDS DB インスタンスに直接接続できます。

 最初に、RDS DB インスタンスからセキュリティグループにアクセスできるようにして、コンピュータからのトラフィックを許可します。

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. [**データベース**] 設定カテゴリで、[**編集**] を選択します。

1. [**エンドポイント**] の横にある Amazon RDS コンソールリンクを選択します。

1. [**RDS Dashboard**] のインスタンスの詳細ページで、[**Security and Network**] の [**Security Groups**] から、*rds-* で始まるセキュリティグループを選択します。
**注記**  
データベースには、[**Security Groups**] のラベルが付けられたエントリが複数ある場合があります。古い方のアカウントにデフォルトの [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) が設定されてない場合のみ、最初のエントリ (*awseb* で始まるもの) を使用します。

1. [**Security group details**] で、[**Inbound**] タブ、[**Edit**] の順に選択します。

1. MySQL (ポート 3306)に、CIDR 形式で指定した IP アドレスからのトラフィックを許可するルールを追加します。

1. [**Save**] を選択します。変更はすぐに反映されます。

 環境の Elastic Beanstalk 詳細設定に戻り、エンドポイントを書き留めます。RDS DB インスタンスに接続するには、ドメイン名を使用します。

 MySQL クライアントをインストールし、ポート 3306 でデータベースへの接続を開始します。Windows の場合は、MySQL のホームページから MySQL Workbench をインストールし、プロンプトに従います。

 Linux の場合は、お客様のディストリビューションに対応したパッケージマネージャを使用して、MySQL クライアントをインストールします。次の例は、Ubuntu および Debian から派生したその他の OS で利用できます。

```
// Install MySQL client
$ sudo apt-get install mysql-client-5.5
...
// Connect to database
$ mysql -h aas839jo2vwhwb.cnubrrfwfka8.us-west-2.rds.amazonaws.com -u username -ppassword ebdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 117
Server version: 5.5.40-log Source distribution
...
```

接続後、SQL コマンドを実行し、データベースのステータス、テーブルや行が作成されたかどうかなどの情報を確認できます。

```
mysql> SELECT Resource from Beanstalk;
+--------------+
| Resource     |
+--------------+
| EC2 Instance |
| RDS Instance |
+--------------+
2 rows in set (0.01 sec)
```

# Java ツールとリソース
<a name="create_deploy_Java.resources"></a>

Java アプリケーションを開発する場合は、他にも参照できる場所がいくつかあります。


****  

|  リソース  |  説明  | 
| --- | --- | 
|  [Java AWS 開発フォーラム](https://forums.aws.amazon.com/forum.jspa?forumID=70)  | 質問を投稿してフィードバックを得ることができます。 | 
|  [Java デベロッパーセンター](https://aws.amazon.com/java/)  | サンプルコード、ドキュメント、ツール、追加リソースを 1 か所で入手できる場所です。 | 