Elastic Beanstalk Linux プラットフォームの拡張 - AWS Elastic Beanstalk

Elastic Beanstalk Linux プラットフォームの拡張

AWS Elastic Beanstalk Linux プラットフォームは、アプリケーションの開発と実行をサポートするために、すぐに使える多くの機能を提供します。必要に応じて、オプションの設定、ソフトウェアのインストール、ファイルおよび起動コマンドの追加、ビルドおよび実行時の指示の提供、環境の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのさまざまなプロビジョニング段階で実行される初期化スクリプトの追加など、さまざまな方法でプラットフォームを拡張できます。

プラットフォームによっては、アプリケーションの構築または準備方法をカスタマイズしたり、アプリケーションを実行するプロセスを指定することができます。各プラットフォームのトピックでは、プラットフォームによりサポートされている場合は特に BuildfileProcfile について言及されています。特定のプラットフォームについては、「Elastic Beanstalk プラットフォーム」を参照してください。

このページで説明されているとおり、サポートされているすべてのプラットフォームでは、構文とセマンティクスは同じです。個々のプラットフォームのトピックでは、それぞれの言語でアプリケーションを構築および実行するために、ファイルの具体的な使用方法について説明しています。

[Buildfile]

アプリケーションのカスタムビルドおよび設定コマンドを指定するには、アプリケーションソースのルートディレクトリに Buildfile という名前のファイルを配置します。ファイル名では、大文字と小文字が区別されます。Buildfile には、次の構文を使用します。

<process_name>: <command>

Buildfile 内のコマンドは、正規表現 ^[A-Za-z0-9_-]+:\s*[^\s].*$ に一致する必要があります。

Elastic Beanstalk は、Buildfile で実行されるアプリケーションをモニタリングしません。Buildfile は、短期間実行されてタスクが完了したら終了されるコマンドに使用します。長期間継続的に実行される必要のあるアプリケーションプロセスには、Procfile を使用します。

Buildfile 内のすべてのパスは、ソースバンドルのルートと関連します。次の Buildfile の例では、build.sh がシェルスクリプトとして、ソースバンドルのルートに配置されています。

例 [Buildfile]

make: ./build.sh

カスタムビルドステップを提供する場合は、Buildfile ではなく、最も単純なコマンド以外の predeploy プラットフォームフックを使用することをお勧めします。プラットフォームフックは、より豊富なスクリプトとより良いエラー処理を可能にします。プラットフォームフックについては、前のセクションで説明しています。

[Procfile]

アプリケーションを起動して実行するためのカスタムコマンドを指定するには、アプリケーションソースのルートディレクトリに Procfile という名前のファイルを配置します。ファイル名では、大文字と小文字が区別されます。Procfile には、次の構文を使用します。1 つまたは複数のコマンドを指定できます。

<process_name1>: <command1> <process_name2>: <command2> ...

Procfile 内の各行は、正規表現 ^[A-Za-z0-9_-]+:\s*[^\s].*$ に一致する必要があります。

アプリケーションが継続的に実行される必要がある Procfile を使用します。Elastic Beanstalk は、Procfile から実行されるプロセスが継続的に実行されることを期待しています。Elastic Beanstalk はこれらのプロセスを監視し、終了したプロセスを再起動します。短期間実行されるプロセスには、Buildfile コマンドを使用します。

Procfile 内のすべてのパスは、ソースバンドルのルートと関連します。次の例では、Procfile は 3 つのプロセスを定義します。最初のプロセスは、この例では web と呼ばれますが、メインウェブアプリケーションです。

例 [Procfile]

web: bin/myserver cache: bin/mycache foo: bin/fooapp

Elastic Beanstalk は、ポート 5000 のメインウェブアプリケーションにリクエストを転送するようにプロキシサーバーを設定し、このポート番号を設定できます。Procfile の一般的な使用方法は、このポート番号をコマンド引数としてアプリケーションに渡すことです。プロキシ設定の詳細については、このページの「リバースプロキシの設定」セクションを展開します。

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

プラットフォームフックは、環境のプラットフォームを拡張するために特別に設計されています。これらは、アプリケーションのソースコードの一部としてデプロイする実行可能ファイルで、Elastic Beanstalk によって、さまざまなインスタンスプロビジョニング段階で実行されます。

注記

プラットフォームフックは、Amazon Linux AMI プラットフォームのバージョン (Amazon Linux 2 より前) ではサポートされていません。

カスタムスクリプトおよびその他の実行可能ファイルを、ソースバンドルの .platform/hooks ディレクトリの下の、以下のいずれかのサブディレクトリに配置します。

  • prebuild – ファイルは、Elastic Beanstalk プラットフォームエンジンがアプリケーションソースバンドルをダウンロードして抽出した後、アプリケーションとウェブサーバーをセットアップおよび設定する前に実行されます。

    prebuild ファイルは、設定ファイルの commandsセクションにあるコマンドを実行した後、および Buildfile コマンドを実行する前に実行されます。

  • predeploy – ここでのファイルは、Elastic Beanstalk アプリケーションとウェブサーバーをセットアップして設定した後、最終的なランタイムの場所にデプロイする前に実行されます。

    predeploy ファイルは、設定ファイルの container_commandsセクションにあるコマンドを実行した後、および Procfile コマンドを実行する前に実行されます。

  • postdeploy – ここでのファイルは、Elastic Beanstalk プラットフォームエンジンがアプリケーションとプロキシサーバーをデプロイした後に実行されます。

    これは、最後のデプロイワークフローのステップです。

実行可能ファイルは、バイナリファイル、またはインタプリタパスを含む #! 行で始まるスクリプトファイル(#!/bin/bash など)です。すべてのファイルには実行アクセス許可が必要です。フックファイルの実行アクセス許可を設定するために chmod +x を使用します。

Elastic Beanstalk は、ファイル名の辞書順でこれらのディレクトリの各ファイルを実行します。すべてのファイルが root ユーザーとして実行されます。プラットフォームフックの現在の作業ディレクトリ (cwd) は、アプリケーションのルートディレクトリです。prebuild および predeploy ファイルの場合はアプリケーションのステージングディレクトリで、postdeploy ファイルの場合は現在のアプリケーションディレクトリです。いずれかのファイルが失敗した場合(ゼロ以外の終了コードで終了した場合)、デプロイは中止され、失敗します。

実行ファイルは、アプリケーションオプションで定義したすべての環境プロパティ、およびシステム環境変数 HOMEPATH、および PORT にアクセスできます。

アプリケーションのソースコードの .ebextensions ディレクトリに設定ファイルを追加して、Elastic Beanstalk 環境のさまざまな側面を設定できます。とりわけ、設定ファイルを使用すると、環境のインスタンス上のソフトウェアやその他のファイルをカスタマイズしたり、インスタンスで初期化コマンドを実行できます。詳細については、「Linux サーバーでのソフトウェアのカスタマイズ」を参照してください。

設定ファイルを使用して、設定オプションを設定することもできます。オプションの多くはプラットフォームの動作を制御し、これらのオプションの一部はプラットフォーム固有のものです。

Amazon Linux 2 プラットフォームでは、BuildfileProcfile、およびプラットフォームフックを使用して、インスタンスのプロビジョニング中に環境インスタンスでカスタムコードを設定および実行することをお勧めします。これらのメカニズムについては、このページの前のセクションで説明しています。.ebextensions 設定ファイルでコマンドやコンテナコマンドを使用することはできますが、操作は簡単ではありません。たとえば、YAML ファイル内にコマンドスクリプトを記述することは、構文の観点から難しい場合があります。AWS CloudFormation リソースへの参照が必要なスクリプトについては、.ebextensions 設定ファイルを使用する必要があります。

一部のプラットフォームでは、環境インスタンスに nginx リバースプロキシを設定できます。具体的には、すべての Amazon Linux 2 プラットフォームバージョンでは、リバースプロキシサーバーとして nginx を使用しており、ここで説明されているように nginx 設定をサポートしています。

注記

Amazon Linux AMI プラットフォームのバージョン (Amazon Linux 2 より前) では、nginx を別の方法で設定することが必要になる場合があります。これらのレガシーの詳細は、このガイドのそれぞれのプラットフォームのトピックを参照してください。

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

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

~/workspace/my-app/ |-- .platform | `-- nginx | `-- conf.d | `-- myconf.conf `-- other source files

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

~/workspace/my-app/ |-- .platform | `-- nginx | `-- nginx.conf `-- other source files

Elastic Beanstalk の nginx 設定を上書きするには、[nginx.conf] に次の行を追加し、拡張状態ヘルスレポートおよびモニタリング、自動アプリケーションマッピング、および静的ファイル用に Elastic Beanstalk の設定をプルします。

include conf.d/elasticbeanstalk/*.conf;

Elastic Beanstalk は、環境のルート URL 上のメインウェブアプリケーションにウェブトラフィックを転送するように、環境のインスタンスでプロキシサーバーを設定します(例: http://my-env.elasticbeanstalk.com)。

デフォルトでは、Elastic Beanstalk はポート 5000 のメインウェブアプリケーションにリクエストを送信するようにプロキシを設定します。このポート番号を設定するには、次の例に示すように、設定ファイルで aws: elasticbeanstalk: application: environment 名前空間を使用して PORT 環境プロパティを設定します。

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: PORT value: <main_port_number>

使用しているアプリケーションの環境変数の設定の詳細については、「オプション設定」を参照してください。

アプリケーションは、プロキシで設定されているポートをリッスンする必要があります。PORT 環境プロパティを使用してデフォルトポートを変更した場合、コードは PORT 環境変数の値を読み取ることによってポートにアクセスできます。たとえば、Go の os.Getenv("PORT") または Java の System.getenv("PORT") を呼び出します。複数のアプリケーションプロセスにトラフィックを送信するようにプロキシを設定する場合、複数の環境プロパティを設定し、それらの値をプロキシ設定とアプリケーションコードの両方で使用できます。もう 1 つのオプションは、Procfile でコマンド引数としてポート値をプロセスに渡すことです。詳細については、このページの「ビルドファイルと Procfile」セクションを展開してください。

Elastic Beanstalk アプリケーションを Amazon Linux 2 プラットフォームに移行する場合は、「Elastic Beanstalk Linux アプリケーションを Amazon Linux 2 に移行する」の情報も必ずお読みください。

拡張機能を使用したアプリケーションの例

以下の例は、Elastic Beanstalk Amazon Linux 2 プラットフォームでサポートされるいくつかの拡張機能 (Procfile.ebextensions 設定ファイル、カスタムフック、およびプロキシ設定ファイル) を備えたアプリケーションソースバンドルを示しています。

~/my-app/ |-- web.jar |-- Procfile |-- readme.md |-- .ebextensions/ | |-- options.config # Option settings | `-- cloudwatch.config # Other .ebextensions sections, for example files and container commands `-- .platform/ `-- nginx/ # Proxy configuration |-- nginx.conf `-- conf.d/ `-- custom.conf `-- hooks/ # Platform hooks |-- prebuild/ | |-- 01_set_secrets.sh | `-- 12_update_permissions.sh |-- predeploy/ | `-- 01_some_service_stop.sh `-- postdeploy/ |-- 01_set_tmp_file_permissions.sh |-- 50_run_something_after_deployment.sh `-- 99_some_service_start.sh
注記

これらの拡張機能の一部は、Amazon Linux AMI プラットフォームのバージョン (Amazon Linux 2より前) ではサポートされていません。

インスタンスデプロイワークフロー

環境のプラットフォームを拡張する方法が多数あるため、Elastic Beanstalk がインスタンスをプロビジョニングしたり、インスタンスへのデプロイを実行したりするたびに何が起こるかを知ることは有益です。次の図は、このデプロイワークフロー全体を示しています。デプロイのさまざまなフェーズと、各フェーズで Elastic Beanstalk が実行するステップを示します。

注記

この図は、デプロイ中に環境インスタンスで Elastic Beanstalk が実行する一連のステップを表しているわけではありません。この図は、カスタマイズの実行順序とコンテキストを提供するために、説明のために提供します。


        Amazon Linux 2 プラットフォームバージョンを使用する環境内のインスタンスで拡張を実行する順序

デプロイフェーズとステップの詳細を次に示します。

  1. 最初のステップ

    Elastic Beanstalk は、アプリケーションをダウンロードして抽出します。これらの各手順の後、Elastic Beanstalk は拡張性ステップの 1 つを実行します。

    1. 設定ファイルの commands: セクションにあるコマンドを実行します。

    2. ソースバンドルの .platform/hooks/prebuild ディレクトリにある実行可能ファイルを実行します。

  2. 設定

    Elastic Beanstalk は、アプリケーションとプロキシサーバーを設定します。

    1. ソースバンドルの Buildfile にあるコマンドを実行します。

    2. ソースバンドルの .platform/nginx ディレクトリにカスタムプロキシ設定ファイルがある場合は、そのランタイムの場所にコピーします。

    3. 設定ファイルの container_commands: セクションにあるコマンドを実行します。

    4. ソースバンドルの .platform/hooks/predeploy ディレクトリにある実行可能ファイルを実行します。

  3. デプロイ

    Elastic Beanstalk は、アプリケーションとプロキシサーバーをデプロイして実行します。

    1. ソースバンドルの Procfile ファイルにあるコマンドを実行します。

    2. カスタムプロキシ設定ファイルがあれば、プロキシサーバーを実行または再実行します。

    3. ソースバンドルの .platform/hooks/postdeploy ディレクトリにある実行可能ファイルを実行します。