メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

AWS Elastic Beanstalk Java SE プラットフォームを使用する

AWS Elastic Beanstalk を使用して、Java ウェブアプリケーションを実行、構築、設定することができます。

注記

Elastic Beanstalk は、2 つの Java SE 設定(Java 8 と Java 7)を提供します。詳細については、「サポートされるプラットフォーム」を参照してください。

それぞれに割り当てられるメモリ量などの Java 仮想マシン(JVM)コンテナオプションを含む、環境のサーバーインスタンスで実行される処理を設定するには、オプションの Procfile をソースバンドルに含めます。Procfile は、ソースバンドルルートに JAR が 1 つ以上ある場合に必要です。JAR ファイルが 1 つだけの場合は、Elastic Beanstalk は java -jar application_name.jar でそのファイルを実行します。

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

Elastic Beanstalk Java SE プラットフォーム設定は、リバースプロキシとして機能する nginx サーバーを含み、キャッシュ型静的コンテンツを提供し、アプリケーションにリクエストをパスします。

Java SE プラットフォームは、静的ファイルを含むアプリケーションでパスを指定するオプションの定義を可能にする拡張可能な設定オプションの名前空間をサポートします。これにより、静的コンテンツのフォルダーをソースバンドルに含め、同ファイルを直接提供してアプリケーションの負荷を低減するように nginx に伝えることができます。

[Procfile] でアプリケーションプロセスを設定する

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

ソースバンドルのルートに Procfile を保存する必要があります。ファイル名では、大文字と小文字が区別されます。Procfile には、プロセス名、コロン、JAR を実行する Java コマンドの形式を使用します。Procfile 内の各行は、正規表現 ^[A-Za-z0-9_]+:\s*.+$ に一致する必要があります。

[Procfile]

web: java -jar server.jar -Xmms:256m
cache: java -jar mycache.jar
web_foo: java -jar other.jar

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

デフォルトでは、Elastic Beanstalk はポート 5000 のアプリケーションにリクエストを送信するように nginx プロキシを設定します。デフォルトのポートは、PORT システムプロパティを、主要なアプリケーションがリッスンするポートに設定することにより、上書きできます。

注記

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

[Procfile] を使用して複数のアプリケーションを実行すると、Elastic Beanstalk は各アプリケーションが、以前のポートよりも数値が 100 高いポートをリッスンするものとみなします。Elastic Beanstalk は、各アプリケーションがアクセス可能な PORT 変数を、アプリケーションが実行されることが予想されるポートに設定します。System.getProperty("PORT") を呼び出すことで、アプリケーションコード内のこの変数にアクセスできます。

注記

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

Procfile で開始されたプロセスからの標準出力ストリームと標準エラーストリームは、プロセスに関連する名前のログファイルにキャプチャされ、/var/log に格納されます。たとえば、前述の例では web プロセスが stdout および stderr についてそれぞれ web-1.log および web-1.error.log という名前のログを生成します。

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

[Buildfile] で JARs On-Server を構築する

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

Buildfile ファイルでは Procfile ファイルと同じ構文が使用されますが、Buildfile ファイルのコマンドは 1 回のみ実行され、完了後に終了される必要があります。一方、Procfile ファイルのコマンドは、アプリケーションが有効な間は継続的に実行される必要があり、終了された場合には再起動されます。アプリケーションで JAR を実行するには、変わりに [Procfile] を使用します。

[Buildfile] というファイル名(大文字と小文字を区別します)をソースバンドルのルートに追加し、次の方法でビルドコマンドを起動するように設定します。

[Buildfile]

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

上記の例は、Apache Maven を実行してソースコードからウェブアプリケーションを構築しています。Java ウェブアプリケーションサンプルで、この機能を使用するサンプルアプリケーションを探します。

Java SE プラットフォームには、ビルドスクリプトから起動できる次のビルドツールが含まれます。

  • javac – Java コンパイラ

  • ant – Apache Ant

  • mvn – Apache Maven

  • gradle – Gradle

実行順序

アプリケーションソースバンドルに複数のタイプの構成を含めると、次の順序で実行されます。各手順は、直前の手順が完了するまで開始されません。

  • 手順 1: 設定ファイルで定義された commandsfilespackages([.ebextensions])

  • 手順 2: [Buildfile] コマンド

  • 手順 3: 構成ファイルの container_commands([.ebextensions])

  • 手順 4: [Procfile] コマンド(すべてのコマンドは同時に実行されます)

設定ファイルで commandsfilespackages、および container_commands を使用する手順の詳細については、「Linux サーバーでのソフトウェアのカスタマイズ」を参照してください。

ソフトウェア設定のオプション

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

たとえば、この option_settings スニペットは、静的ファイルの名前空間で 2 つのオプションを定義します。1 つめのオプションはパス /public を [public] というフォルダーに、2 つめのオプションはパス /images を [img] というフォルダーにマッピングします。

option_settings:
  - namespace:  aws:elasticbeanstalk:container:java:staticfiles
    option_name:  /public
    value:  public
  - namespace:  aws:elasticbeanstalk:container:java:staticfiles
    option_name:  /images
    value:  img

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

この名前空間には、デフォルトで定義されているオプションはありません。

リバースプロキシを設定する

Elastic Beanstalk はリバースプロキシとして nginx を使用し、ポート 80 の Elastic Load Balancing ロードバランサーにアプリケーションをマッピングします。Elastic Beanstalk は、拡張または独自の設定で完全に上書きできるデフォルトの nginx 設定を提供します。

Elastic Beanstalk のデフォルトの nginx 設定を拡張するには、アプリケーションソースバンドルの [.ebextensions/nginx/conf.d/] というフォルダーに [.conf] 設定ファイルを追加します。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 の設定をプルします。

 include conf.d/elasticbeanstalk/*.conf;