AWS Elastic Beanstalk
開発者ガイド

Application Load Balancer を設定する

負荷分散を有効にしている場合、AWS Elastic Beanstalk 環境には環境内のインスタンス間でトラフィックを分散する Elastic Load Balancing ロードバランサーが装備されています。Elastic Load Balancing はいくつかのロードバランサータイプをサポートしています。これについての詳細は、Elastic Load Balancing ユーザーガイド を参照してください。

このトピックでは、Application Load Balancer の設定について説明します。Elastic Beanstalk がサポートするすべてのロードバランサータイプの設定に関する詳細は、「AWS Elastic Beanstalk 環境のロードバランサー」を参照してください。

注記

環境の作成時にのみに環境が使用するロードバランサーのタイプを選択できます。実行中の環境のロードバランサーの行動管理の設定は変更できますが、タイプを変更することはできません。

はじめに

Application Load Balancer は、アプリケーションネットワークプロトコルレイヤーでトラフィックを検査してリクエストのパスを識別し、パスが異なるリクエストを別々の宛先にダイレクトできるようにします。

デフォルトでは、Application Load Balancer は Classic Load Balancer と同じ機能を実行します。デフォルトのリスナーはポート 80 で HTTP リクエストを受け取り、環境内のインスタンスに分散します。ポート 443 でセキュアなリスナーを証明書とともに追加して、HTTPS トラフィックの復号、ヘルスチェックの動作の設定、ロードバランサーから Amazon Simple Storage Service(Amazon S3) バケットへのアクセスログのプッシュを行うことができます。

注記

Classic Load Balancer または ネットワークロードバランサー とは異なり、Application Load Balancer はレイヤー (レイヤー 4) TCP または SSL/TLS リスナーを転送することはできません。これは HTTP および HTTPS リスナーでのみサポートされています。また、これはロードバランサーとバックエンドインスタンス間の HTTPS 接続を認証するバックエンド認証を使用できません。

Elastic Beanstalk 環境では、Application Load Balancer を使用して特定のパスのトラフィックをウェブサーバーインスタンスの別のポートにダイレクトできます。Classic Load Balancer では、リスナーへのすべてのトラフィックはバックエンドインスタンスの 1 つのポートにルーティングされます。Application Load Balancer を使用すると、リスナーで複数のルールを設定し、特定のパスへのリクエストを別々のバックエンドポートにルーティングできます。

たとえば、ログインプロセスをメインアプリケーションとは別に実行できます。環境のインスタンスのメインアプリケーションがほとんどのリクエストを受け入れ、ポート 80 でリッスンしている間、ログインプロセスはポート 5000 でリッスンし、/login パスへのリクエストを受け入れます。クライアントからのすべての着信リクエストは、ポート 80 に入ります。Application Load Balancer を使用すると、ポート 80 の着信トラフィック用に、リクエスト内のパスに応じて 2 つの異なるプロセスにトラフィックをルートする 2 つのルールで単一リスナーを設定できます。1 つのルールは、トラフィックを /login ポート 5000 でリッスンするログインプロセスにルートします。デフォルトのルールは、他のすべてのトラフィックをポート 80 でリッスンするメインアプリケーションプロセスにルートします。

Application Load Balancer ルールでは、ターゲットグループにリクエストをマッピングします。Elastic Beanstalk では、ターゲットグループは プロセスによって表されます。プロセスのプロトコル、ポート、ヘルスチェック設定を構成できます。プロセスは環境内のインスタンスで実行されるプロセスを表します。デフォルトプロセスは、アプリケーションの前面で実行されるリバースプロキシ (nginx または Apache) のポート 80 のリスナーです。

注記

Elastic Beanstalk 外部では、ターゲットグループはインスタンスのグループにマッピングされます。リスナーはルールとターゲットグループを使用し、パスに基づいてトラフィックを別々のインスタンスにルーティングできます。Elastic Beanstalk 内で、環境のすべてのインスタンスは同じであるため、別々のポートでリッスンしているプロセス間で区別されます。

Classic Load Balancer では、環境全体で 1 つのヘルスチェックパスが使用されます。Application Load Balancer の各プロセスには、ロードバランサーと Elastic Beanstalk で強化されたヘルスモニタリングによってモニタリングされる、別のヘルスチェックパスがあります。

Application Load Balancer を使用するには、環境はデフォルトまたはカスタム VPC にある必要があり、アクセス権限の標準セットを持つサービスロールが必要です。古いサービスロールがある場合は、そこでのアクセス権限を更新して、elasticloadbalancing:DescribeTargetHealth および elasticloadbalancing:DescribeLoadBalancers を含めなければならない可能性があります。Application Load Balancer の詳細については、「Application Load Balancer 用ユーザーガイド」を参照してください。

注記

Application Load Balancer のヘルスチェックでは、Elastic Beanstalk のヘルスチェックパスは考慮されていません。代わりに、各プロセス用に別々に設定された特定のパスを使用します。

Elastic Beanstalk コンソールを使用した Application Load Balancer の設定

Elastic Beanstalk コンソールを使用して、環境の作成時または後の環境の実行時に Application Load Balancer のリスナー、プロセスおよびルールを設定できます。

環境の作成時に Elastic Beanstalk コンソールで Application Load Balancer を設定するには

  1. [新しい環境の作成ウィザード] を使用して、環境の作成を開始します。

  2. ウィザードの主要ページで、[環境の作成] を選択する前に、「さらにオプションを設定」を選択します。

  3. [高可用性] 設定プリセットを選択します。

    または、[容量] 設定カードで [ロードバランサー] 環境タイプを設定します。詳細については、「容量」を参照してください。

  4. [ロードバランサー] 設定カードで、[変更] を選択します。

  5. まだ選択されていない場合には、[Application Load Balancer] オプションを選択します。

     Elastic Load Balancing 設定ページ - ロードバランサータイプの選択
  6. 環境に必要な任意の Application Load Balancer 設定変更を行います。

  7. [保存] を選択し、環境に必要なその他の任意の設定変更を行います。

  8. [Create environment] を選択します。

Elastic Beanstalk コンソールで実行中の環境の Application Load Balancer を設定するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [ロードバランサー] 設定カードで、[変更] を選択します。

    注記

    [ロードバランサー] 設定カードに [変更] ボタンがない場合、お客様の環境には [ロードバランサー] がありません。設定方法については、「環境タイプの変更」を参照してください。

  5. 環境に必要な Application Load Balancer の設定変更を行います。

  6. [Apply] を選択します。

リスナー

このリストを使用して、ロードバランサーにリスナーを指定します。各リスナーは、指定されたプロトコルを使用して、指定されたポートの着信クライアントトラフィックをインスタンスの 1 つ以上のプロセスにルーティングします。初期状態では、このリストにはポート 80 で着信する HTTP トラフィックを HTTP ポート 80 でリッスンする [デフォルト] という名前のプロセスにルートするデフォルトのリスナーが表示されます。

 Application Load Balancer 設定 - リスナーリスト

既存のリスナーを設定するには

  1. そのテーブルエントリの横にあるチェックボックスを選択し、続いて [アクション]、[編集] の順に選択します。

  2. [編集] を選択した場合、[Application Load Balancer listener (アプリケーションロードバランサーリスナー)] ダイアログボックスを使用して設定を編集し、[保存] を選択します。

リスナーを追加するには

  1. [リスナーの追加] を選択します。

  2. [Application Load Balancer listener (アプリケーションロードバランサーリスナー)] ダイアログボックスで設定を行い、[追加] を選択します。

[Application Load Balancer listener (アプリケーションロードバランサーリスナー)] ダイアログボックスを使用して、リスナーがトラフィックをリッスンするポートおよびプロトコルを選択します。HTTPS プロトコルを選択する場合、SSL 設定を構成します。

HTTPS リスナーを設定する前に、有効な SSL 証明書を保持していることを確認します。AWS Certificate Manager (ACM) を使用して新しい証明書を作成するか、あるいは証明書とキーを AWS Identity and Access Management (IAM) にアップロードします。ACM 証明書のリクエストの詳細については、『AWS Certificate Manager ユーザーガイド』の「証明書のリクエスト」を参照してください。ACM への第三者の証明書のインポートの詳細については、AWS Certificate Manager ユーザーガイドの「証明書のインポート」を参照してください。ACM がお客様の AWS リージョンで利用できない場合は、既存の証明書とキーを IAM にアップロードします。

証明書の作成と IAM へのアップロードに関する詳細については、IAM ユーザーガイドの「サーバー証明書の使用」を参照してください。Elastic Beanstalk における HTTPS の設定と証明書の使用の詳細については、「Elastic Beanstalk 環境用に HTTPS を設定する」を参照してください。

プロセス

このリストを使用して、ロードバランサーにプロセスを指定します。プロセスは、トラフィックをルートするターゲットです。各リスナーは、指定されたプロトコルを使用して、指定されたポートの着信クライアントトラフィックをインスタンスの 1 つ以上のプロセスにルーティングします。初期状態では、このリストにはポート 80 で着信する HTTP トラフィックをリッスンするデフォルトのプロセスが表示されます。

 Application Load Balancer の設定 - プロセスリスト

既存のプロセスの設定を編集するか、あるいは新しいプロセスを追加します。リストのプロセスの編集、あるいはプロセスの追加を開始するには、「リスナーリスト」と同じ手順を使用します。[環境プロセス] ダイアログボックスが開きます。

Application Load Balancer の環境プロセスのダイアログボックス設定

定義

これらの設定を使用して、[名前] およびリクエストをリッスンする [ポート] と [プロトコル] でプロセスを定義します。

 名前、ポート、プロトコルの Application Load Balancer プロセス設定

ヘルスチェック

次の設定を使用して、プロセスのヘルスチェックを設定します。

  • [HTTP コード] - 正常なプロセスを示す HTTP ステータスコード。

  • [パス] - プロセスのヘルスチェックリクエストパス。

  • [タイムアウト] - ヘルスチェックが応答するまで待機する時間 (秒単位)。

  • [間隔] - 個々のインスタンスのヘルスチェックの間隔 (秒単位)。間隔はタイムアウトより大きくする必要があります。

  • [非常値のしきい値]、[正常のしきい値] - Elastic Load Balancing がインスタンスのヘルス状態を変更する前に、ヘルスチェックが失敗あるいは成功するべきそれぞれの数。

  • [登録解除の遅延] - インスタンスの登録を解除する前にアクティブリクエストの完了を待機する時間 (秒単位)。

 ヘルスチェックのための Application Load Balancer プロセス

注記

Elastic Load Balancing ヘルスチェックは、環境の Auto Scaling グループのヘルスチェックの動作には影響しません。Elastic Load Balancing ヘルスチェックが失敗したインスタンスを Amazon EC2 Auto Scaling によって自動的に置き換えるように手動で設定しない限り、Amazon EC2 Auto Scaling による自動置き換えは行われません。詳細については、「Auto Scaling ヘルスチェックの設定」を参照してください。

ヘルスチェックと、それが環境の全体的な状態に与えるに影響の詳細については、「基本ヘルスレポート」を参照してください。

セッション

この設定を使用して、スティッキーセッション (スティッキーポリシーが有効になっています) を有効あるいは無効にし、スティッキーセッションの期間 (Cookie の維持期間) を最大で 604800 秒まで設定します。

セッション維持のための Application Load Balancer プロセス

ルール

このリストを使用して、ロードバランサーにリスナールールを指定します。ルールマップでは、リスナーがターゲットプロセスへの特定のパスパターンを受信することをリクエストします。各リスナーでは、インスタンスでの異なるプロセスへの別々のパスにリクエストをルーティングする複数のルールを保持することができます。ルールには着信するリクエストに適用されるべき優先度を決定する優先順位の数字があります。追加する新しいリスナーごとに、Elastic Beanstalk はリスナーのトラフィックのすべてをデフォルトのプロセスにルートするデフォルトのルールを追加します。このデフォルトのルールの優先順位は最も低く、着信するリクエストに一致する他のルールが同じリスナーにない場合にのみ適用されます。初期状態では、このリストにはデフォルト HTTP ポート 80 リスナーのデフォルトのルールが表示されます。

 Application Load Balancer 設定 - ルールリスト

既存のルールの設定を編集するか、あるいは新しいルールを追加します。リストのルールの編集、あるいはルールの追加を開始するには、「リスナーリスト」と同じ手順を使用します。[リスナールール ] ダイアログボックスが以下の設定で開きます。

  • [名前] - ルールの名前。

  • [リスナーポート] - ルールが適用するリスナーのポート。

  • [優先度] - ルールの優先度。数の小さい優先度番号が優先されます。リスナーのルールの優先順位は一意である必要があります。

  • [パスパターン] - ルールが適用するリクエストパスを定義するパターン。

  • [プロセス] - ロードバランサーがルールと一致するリクエストをルートするプとセス。

既存のルールを編集する場合、その [名前] および [リスナーポート] を変更することはできません。デフォルトのルールを編集する場合、変更できる設定は [プロセス] のみです。

 Application Load Balancer 設定 - ルールリスト

アクセスログのキャプチャ

これらの設定を使用して、Application Load Balancer に送信されたリクエストの詳細情報のログを取得するように Elastic Load Balancing を設定します。アクセスログのキャプチャはデフォルトでは無効になっています。有効になっている場合 ([ログの保存])、Elastic Load Balancing は、設定する Amazon S3 バケット (S3 バケット) にログを保存します。[プレフィックス] 設定は、ログのバケットの最上位フォルダを指定します。Elastic Load Balancing は、プレフィックスの下の AWSLogs というフォルダにログを配置します。プレフィックスを指定しない場合、Elastic Load Balancing はバケットのルートレベルにフォルダを配置します。

 Application Load Balancer 設定 - アクセスログ

例: 安全なリスナーおよび 2 つのプロセスの Application Load Balancer

この例では、アプリケーションにはエンドツーエンドのトラフィック暗号および管理リクエストを処理するための別のプロセスが必要です。環境の Application Load Balancer を設定してこの要件を満たすには、デフォルトリスナーを削除し、 HTTPS リスナーを追加してデフォルトプロセスが HTTPS のポート 443 をリッスンするように指示し、異なるパスで管理トラフィックにプロセスおよびルールを追加します。

この例でロードバランサーを設定するには

  1. ポート 80 HTTP リスナーを削除します。デフォルトのリスナーを選択し、[アクション] で [「削除済み」とマーク] を選択します。

     Application Load Balancer 設定 - デフォルトリスナーの削除
  2. 安全なリスナーを追加します。[Port] に「443」と入力します。[プロトコル] で HTTPS を選択します。[SSL 証明書] で、SSL 証明書の ARN を選択します。たとえば、arn:aws:iam::123456789012:server-certificate/abc/certs/buildarn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678 などです。

     Application Load Balancer の設定 - 安全なリスナーを追加する

    これでリストに追加のリスナーが表示されます。

     Application Load Balancer 設定 - 2 つのリスナーがあるリスナーリスト
  3. HTTPS のデフォルトプロセスを設定します。デフォルトのプロセスを選択し、[アクション] で [編集] を選択します。[Port] に「443」と入力します。[プロトコル] で HTTPS を選択します。

     Application Load Balancer 設定 - HTTPS にデフォルトのプロセスを設定する
  4. 管理プロセスを追加します。[Name] に、「admin」と入力します。[Port] に「443」と入力します。[プロトコル] で HTTPS を選択します。[ヘルスチェック] で [パス] に /admin と入力します。

     Application Load Balancer 設定 - 管理プロセスの追加
  5. 管理トラフィックのルールを追加します。[Name] に、「admin」と入力します。[リスナーポート] で 443 と入力します。[パスパターン] には /admin/* と入力します。[プロセス] で admin を選択します。

     Application Load Balancer 設定 - 管理ルールの追加

EB CLI を使用した Application Load Balancer の設定

eb create の実行時に、EB CLI によりロードバランサータイプの選択が求められます。

$ eb create Enter Environment Name (default is my-app): test-env Enter DNS CNAME prefix (default is my-app): test-env-DLW24ED23SF Select a load balancer type 1) classic 2) application 3) network (default is 1): 2

--elb-type オプションでロードバランサータイプを指定することもできます。

$ eb create test-env --elb-type application

Application Load Balancer の名前空間

Application Load Balancer に関連する設定は、以下の名前空間で確認できます。

  • aws:elasticbeanstalk:environment – 環境のロードバランサーのタイプを選択します。Application Load Balancer の値は application です。

  • aws:elbv2:loadbalancer – Application Load Balancer に全体として適用されるアクセスログの設定とその他の設定を行います。

  • aws:elbv2:listener – Application Load Balancer でリスナーを設定します。これらの設定は、クラシックロードバランサー に対する aws:elb:listener の設定にマッピングされます。

  • aws:elbv2:listenerrule – リクエストパスに応じて、別々のプロセスにトラフィックをルーティングするルールを設定します。ルールは Application Load Balancer に固有です。

  • aws:elasticbeanstalk:environment:process – ヘルスチェックを設定し、環境のインスタンスで実行するプロセス用のポートとプロトコルを指定します。ポートとプロトコル設定は Classic Load Balancer のリスナー用の aws:elb:listener のインスタンスポートおよびインスタンスプロトコル設定にマッピングされます。ヘルスチェックの設定は、aws:elb:healthcheck および aws:elasticbeanstalk:application 名前空間の設定にマッピングされます。

.ebextensions/application-load-balancer.config

Application Load Balancer の使用を開始するには、設定ファイルを使用してロードバランサータイプを application に設定します。

option_settings: aws:elasticbeanstalk:environment: LoadBalancerType: application

注記

環境の作成中にのみ、ロードバランサータイプを設定できます。

例 .ebextensions/alb-access-logs.config

以下の設定ファイルでは、Application Load Balancer を使用して、環境のアクセスログをアップロードすることができます。

option_settings: aws:elbv2:loadbalancer: AccessLogsS3Bucket: my-bucket AccessLogsS3Enabled: 'true' AccessLogsS3Prefix: beanstalk-alb

.ebextensions/alb-default-process.config

以下の設定ファイルでは、デフォルトプロセスのヘルスチェックと維持の設定を変更します。

option_settings: aws:elasticbeanstalk:environment:process:default: DeregistrationDelay: '20' HealthCheckInterval: '15' HealthCheckPath: / HealthCheckTimeout: '5' HealthyThresholdCount: '3' UnhealthyThresholdCount: '5' Port: '80' Protocol: HTTP StickinessEnabled: 'true' StickinessLBCookieDuration: '43200'

例 .ebextensions/alb-secure-listener.config

以下の設定ファイルでは、ポート 443 でセキュアリスナーと一致するプロセスを追加します。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS SSLCertificateArns: arn:aws:acm:us-east-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7 aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS

例 .ebextensions/alb-admin-rule.config

以下の設定ファイルでは、ポート 4443 でリッスンする admin というプロセスに、リクエストパス /admin を使用してトラフィックをルーティングするルールでセキュアリスナーを追加します。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS Rules: admin SSLCertificateArns: arn:aws:acm:us-east-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7 aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS aws:elasticbeanstalk:environment:process:admin: HealthCheckPath: /admin Port: '4443' Protocol: HTTPS aws:elbv2:listenerrule:admin: PathPatterns: /admin/* Priority: 1 Process: admin