共有 Application Load Balancer の設定 - AWS Elastic Beanstalk

共有 Application Load Balancer の設定

負荷分散を有効にしている場合、AWS Elastic Beanstalk 環境には環境内のインスタンス間にトラフィックを分散する Elastic Load Balancing ロードバランサーが用意されています。Elastic Load Balancing は、いくつかのロードバランサータイプをサポートしています。それらについては、Elastic Load Balancing ユーザーガイドを参照してください。Elastic Beanstalk では、ロードバランサーを作成したり、作成した共有ロードバランサーを指定したりできます。

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

注記

環境の作成時にのみに環境が使用するロードバランサーのタイプを選択できます。実行中の環境のロードバランサーの行動管理の設定は変更できますが、タイプを変更することはできません。また、専用ロードバランサーから共有ロードバランサーに切り替えることも、その逆もできません。

はじめに

共有ロードバランサーは、Amazon Elastic Compute Cloud (Amazon EC2) サービスにより自分で作成および管理し、複数の Elastic Beanstalk 環境で使用するロードバランサーです。

負荷分散されたスケーリング環境を作成し、Application Load Balancer の使用を選択すると、Elastic Beanstalk はデフォルトで環境専用のロードバランサーを作成します。Application Load Balancer とは何か、Elastic Beanstalk 環境でのしくみについては、Elastic Beanstalk 用の Application Load Balancer の設定の概要を参照してください。

状況によっては、複数の専用ロードバランサーを使用するコストを削減したい場合があります。これは、アプリケーションがモノリシックサービスではなくマイクロサービスのスイートである場合など、複数の環境がある場合に役立ちます。このような場合は、共有ロードバランサーの使用を選択できます。

共有ロードバランサーを使用するには、まず Amazon EC2 で共有ロードバランサーを作成し、1 つ以上のリスナーを追加します。Elastic Beanstalk 環境の作成中に、ロードバランサーを提供し、リスナーポートを選択します。Elastic Beanstalk は、リスナーを環境内のデフォルトのプロセスに関連付けます。カスタムリスナールールを追加して、特定のホストヘッダーとパスから他の環境プロセスにトラフィックをルーティングできます。

Elastic Beanstalk は、共有ロードバランサーにタグを追加します。タグ名は elasticbeanstalk:shared-elb-environment-count で、値はこのロードバランサーを共有する環境の数です。

共有ロードバランサーの使用は、専有ロードバランサーの使用とはいくつかの方法で異なります。

内容 専用 Application Load Balancer 共有 Application Load Balancer

管理

Elastic Beanstalk は、ロードバランサー、リスナー、リスナールール、プロセス (ターゲットグループ) を作成および管理します。Elastic Beanstalk は、環境の終了時にそれらも削除します。そのオプションを選択した場合、Elastic Beanstalk はロードバランサーのアクセスログのキャプチャを設定できます。

Elastic Beanstalk の外部でロードバランサーとリスナーを作成および管理します。Elastic Beanstalk によってデフォルトのルールとデフォルトのプロセスが作成および管理されます。お客様はルールとプロセスを追加できます。Elastic Beanstalk は、環境の作成中に追加されたリスナールールとプロセスを削除します。

リスナールール

Elastic Beanstalk は、リスナーごとにデフォルトのルールを作成し、すべてのトラフィックをリスナーのデフォルトのプロセスにルーティングします。

Elastic Beanstalk は、デフォルトのルールをポート 80 リスナーにのみ関連付けます (存在する場合)。別のデフォルトのリスナーポートを選択した場合は、デフォルトのルールをそれに関連付ける必要があります (Elastic Beanstalk コンソールと EB CLI を使用して行います)。

ロードバランサーを共有する環境間でリスナールール条件の競合を解決するために、Elastic Beanstalk はホストヘッダー条件として環境の CNAME をリスナールールに追加します。

Elastic Beanstalk は、ロードバランサーを共有する環境間でルールの優先順位設定を相対的なものとして扱い、作成時に絶対的な優先順位にマッピングします。

セキュリティグループ

Elastic Beanstalk は、デフォルトのセキュリティグループを作成し、ロードバランサーにアタッチします。

ロードバランサーに使用する 1 つ以上のセキュリティグループを設定できます。設定しない場合、Elastic Beanstalk は、管理している既存のセキュリティグループがロードバランサーに既にアタッチされているかどうかを確認します。アタッチされていない場合、Elastic Beanstalk はセキュリティグループを作成し、ロードバランサーにアタッチします。Elastic Beanstalk は、ロードバランサーを共有する最後の環境が終了すると、このセキュリティグループを削除します。

更新

環境の作成後に Application Load Balancer を更新できます。リスナー、リスナールール、およびプロセスを編集できます。ロードバランサーのアクセスログのキャプチャを設定できます。

Elastic Beanstalk を使用して Application Load Balancer でアクセスログのキャプチャを設定することはできません。また、環境の作成後にリスナーとリスナールールを更新することもできません。プロセス (ターゲットグループ) のみを更新できます。アクセスログのキャプチャを設定し、リスナーとリスナールールを更新するには、Amazon EC2 を使用します。

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

Elastic Beanstalk コンソールを使用して、環境の作成中に共有 Application Load Balancer を設定できます。環境で使用するアカウントの共有可能なロードバランサーの 1 つを選択し、デフォルトのリスナーポートを選択して、追加のプロセスとリスナールールを設定できます。

環境の作成後は、Application Load Balancer コンソールで共有 Application Load Balancer の設定を編集することはできません。リスナー、リスナールール、プロセス (ターゲットグループ)、アクセスログのキャプチャを設定するには、Amazon EC2 を使用します。

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

  1. Elastic Beanstalk コンソールを開き、[リージョン] リストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択します。

  3. [新しい環境の作成] を選択して、環境の作成を開始します。

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

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

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

  6. [ロードバランサー] 設定カテゴリで、[編集] を選択します。

  7. まだ選択されていない場合は、[Application Load Balancer] オプションを選択してから、[Shared (共有)] オプションを選択します。

    
            Elastic Load Balancing 設定ページ - ロードバランサータイプの選択
  8. 共有 Application Load Balancer 設定に、環境に必要な変更を加えます。

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

  10. [Create environment (環境の作成)] を選択します。

共有 Application Load Balancer の設定

共有 Application Load Balancer

このセクションを使用して、環境に合わせて共有 Application Load Balancer を選択し、デフォルトのトラフィックルーティングを設定します。

ここで共有 Application Load Balancer を設定する前に、Amazon EC2 を使用してアカウントで、1 つ以上のリスナーと共有する 1 つ以上の Application Load Balancer を定義します。まだ選択されていない場合は、[Manage load balancers (ロードバランサーの管理)] を選択できます。Elastic Beanstalk は、Amazon EC2 コンソールを新しいブラウザタブで開きます。

Elastic Beanstalk の外部で共有ロードバランサーを設定した場合、このコンソールセクションで以下のように設定します。

  • [Load balancer ARN (ロードバランサー ARN)] - この環境で使用する共有ロードバランサー。ロードバランサーのリストから選択するか、ロードバランサーの Amazon リソースネーム (ARN) を入力します。

  • [Default listener port (デフォルトのリスナーポート)] - 共有ロードバランサーがリッスンするリスナーポート。既存のリスナーポートのリストから選択します。ホストヘッダーに環境の CNAME を含む、このリスナーからのトラフィックは、この環境のデフォルトプロセスにルーティングされます。


          Application Load Balancer の設定 - 共有ロードバランサーの選択

プロセス

このリストを使用して、共有ロードバランサーにプロセスを指定します。プロセスは、トラフィックをルートするターゲットです。初期状態では、このリストには、デフォルトリスナーからトラフィックを受信するデフォルトプロセスが表示されます。


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

既存のプロセスを設定するには

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

  2. [環境プロセス] ダイアログボックスを使用して設定を編集し、[保存] を選択します。

プロセスを追加するには

  1. [プロセスの追加] を選択します。

  2. [環境プロセス] ダイアログボックスで設定を行い、[追加] を選択します。

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

定義

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


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

ヘルスチェック

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

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

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

  • [Timeout (タイムアウト)] - ヘルスチェックのレスポンスを待つ時間 (秒単位)。

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

  • [Unhealthy threshold (非正常のしきい値)]、[Healthy threshold (正常のしきい値)] - Elastic Load Balancing がインスタンスのヘルス状態を変更する前に、ヘルスチェックに失敗または合格しなければならない回数。

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


            Application Load Balancer でのヘルスチェック用のプロセスの設定
注記

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

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

セッション

[Stickiness policy enabled] ボックスをオンまたはオフにして、スティッキーセッションを有効または無効にします。[Cookie の維持期間] を使用して、スティッキーセッションの有効期間を最大 604800 秒までに設定します。


            セッションの維持に関連する Application Load Balancer プロセスの設定

ルール

このリストを使用して、共有ロードバランサーにカスタムリスナールールを指定します。ルールマップでは、リスナーがターゲットプロセスへの特定のパスパターンを受信することをリクエストします。各リスナーでは、リスナーを共有する異なる環境のインスタンスでの異なるプロセスへの別々のパスにリクエストをルーティングする複数のルールを保持することができます。

ルールには着信するリクエストに適用されるべき優先度を決定する優先順位の数字があります。Elastic Beanstalk は、すべてのデフォルトのリスナーのトラフィックを新しい環境のデフォルトのプロセスにルーティングするデフォルトのルールを追加します。このデフォルトのルールの優先順位は最も低く、着信するリクエストに一致する他のルールが同じリスナーにない場合にのみ適用されます。最初は、カスタムルールを追加していない場合、リストは空です。デフォルトのルールは表示されません。


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

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

  • [Name (名前)] - ルールの名前。

  • [Listener port (リスナーポート)] - ルールが適用されるリスナーのポート。

  • [Priority (優先度)] - ルールの優先度。数の小さい優先度番号が優先されます。リスナーのルールの優先順位は一意である必要があります。Elastic Beanstalk では、共有環境全体でルールの優先順位が相対的なものとして扱われ、作成時に絶対的な優先順位にマッピングされます。

  • Match conditions (一致条件) - ルールが適用されるリクエスト URL の条件のリスト。条件には、[HostHeader] (URL のドメイン部分) と [PathPattern] (URL のパス部分) の 2 種類があります。1 つの条件は環境サブドメイン用に予約されており、最大 4 つの条件を追加できます。各条件値は最大 128 文字で、ワイルドカード文字を含めることができます。

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


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

例: セキュアなマイクロサービスベースのアプリケーションに共有 Application Load Balancer を使用する

この例では、アプリケーションは複数のマイクロサービスで構成され、それぞれが Elastic Beanstalk 環境として実装されています。さらに、エンドツーエンドのトラフィック暗号化が必要です。ここでは、マイクロサービス環境の 1 つを紹介します。マイクロサービス環境には、ユーザーリクエスト用のメインプロセスと、管理リクエストを処理するための別個のプロセスがあります。

これらの要件を満たすには、Amazon EC2 を使用して、マイクロサービス間で共有する Application Load Balancer を作成します。ポート 443 および HTTPS プロトコルに安全なリスナーを追加します。次に、マイクロサービスドメインごとに 1 つずつ、複数の SSL 証明書をリスナーに追加します。Application Load Balancer とセキュアなリスナーの作成の詳細については、Application Load Balancer ユーザーガイドの「Application Load Balancer の作成」と「Application Load Balancer の HTTPS リスナーの作成」を参照してください。

Elastic Beanstalk で、共有 Application Load Balancer を使用するように各マイクロサービス環境を設定してから、デフォルトのリスナーポートを 443 に設定します。ここで示している特定の環境の場合、デフォルトのプロセスが HTTPS でポート 443 をリッスンしていることを示し、別のパスで管理トラフィックのプロセスとリスナールールを追加します。

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

  1. [Shared Application Load Balancer (共有 Application Load Balancer)] セクションでロードバランサーを選択してから、[Default listener port (デフォルトのリスナーポート)] で 443 を選択します。ロードバランサーが唯一のリスナーである場合は、リスナーポートが既に選択されている必要があります。

    
            Application Load Balancer の設定 - セキュアなリスナーの追加
  2. デフォルトプロセスを HTTPS に設定します。 デフォルトのプロセスを選択し、[アクション] で [編集] を選択します。[ポート] に 443 と入力します。[プロトコル] で、[HTTPS] を選択します。

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

    
            Application Load Balancer の設定例 - 管理プロセスを追加する
  4. 管理トラフィックのルールを追加します。 [名前] に admin と入力します。[リスナーポート] に 443 と入力します。[一致条件] の場合は、/admin/* の値を使用して [PathPattern] を追加します。[プロセス] で、admin を選択します。

    
            Application Load Balancer の設定例 - 管理ルールを追加する

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

eb create の実行時に、EB CLI によりロードバランサータイプの選択が求められます。application (デフォルト) を選択し、アカウントに共有可能な Application Load Balancer が 1 つ以上ある場合、EB CLI では共有 Application Load Balancer を使用するかどうかも尋ねられます。y と答えると、ロードバランサーとデフォルトポートを選択するように求められます。

$ 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 2): Your account has one or more sharable load balancers. Would you like your new environment to use a shared load balancer?(y/N) y Select a shared load balancer 1)MySharedALB1 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB1/6d69caa75b15d46e 2)MySharedALB2 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8 (default is 1): 2 Select a listener port for your shared load balancer 1) 80 2) 100 3) 443 (default is 1): 3

コマンドオプションを使用して、共有ロードバランサーを指定することもできます。

$ eb create test-env --elb-type application --shared-lb MySharedALB2 --shared-lb-port 443

共有 Application Load Balancer の名前空間

共有 Application Load Balancer に関連する設定は、以下の名前空間にあります。

  • aws:elasticbeanstalk:environment - 環境のロードバランサーの種類を選択し、Elastic Beanstalk に共有ロードバランサーを使用することを指示します。

    設定ファイル (.Ebextensions) では、これらの 2 つのオプションを設定できません。

  • aws:elbv2:loadbalancer - 共有 Application Load Balancer の ARN とセキュリティグループを設定します。

  • aws:elbv2:listener - リスナールールのリストを指定して、共有 Application Load Balancer のリスナーを環境プロセスに関連付けます。

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

  • aws:elasticbeanstalk:environment:process - ヘルスチェックを設定し、環境のインスタンスで実行するプロセス用のポートとプロトコルを指定します。

.ebextensions/application-load-balancer-shared.config

共有 Application Load Balancer の使用を開始するには、Elastic Beanstalk コンソール、EB CLI、または API を使用してロードバランサータイプを application に設定し、共有ロードバランサーの使用を選択します。設定ファイルを使用して、共有ロードバランサーを設定します。

option_settings: aws:elbv2:loadbalancer: SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
注記

このオプションは、環境の作成中にのみ設定できます。

例 .ebextensions/alb-shared-secure-listener.config

次の設定ファイルは、共有ロードバランサーのポート 443 でデフォルトの安全なリスナーを選択し、ポート 443 をリッスンするデフォルトのプロセスを設定します。

option_settings: aws:elbv2:loadbalancer: SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8 aws:elbv2:listener:443: rules: default aws:elasticbeanstalk:environment:process:default: Port: '443' Protocol: HTTPS

例 .ebextensions/alb-shared-admin-rule.config

次の設定ファイルは、前の例に基づいて設定され、リクエストパスが /admin のトラフィックを、ポート 4443 でリッスンする admin という名前のプロセスにルーティングするルールを追加します。

option_settings: aws:elbv2:loadbalancer: SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8 aws:elbv2:listener:443: rules: default,admin aws:elasticbeanstalk:environment:process:default: 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