

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

# 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;
  }
}
```