

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

# 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` にコピーされます。