Application Load Balancer の設定 - AWS Elastic Beanstalk

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

Application Load Balancer の設定

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

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

注記

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

はじめに

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

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

注記

Classic Load Balancer や Network 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 つのルールで単一リスナーを設定できます。ポート 5000 でリッスンするログインプロセスに、/login へのトラフィックをルーティングするカスタムルールを追加します。デフォルトのルールは、他のすべてのトラフィックをポート 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. Elastic Beanstalk コンソールを開き、[Regions (リージョン)] リストで AWS リージョンを選択します。

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

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

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

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

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

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

  7. [Application Load Balancer] および [Dedicated (専用)] オプションがまだ選択されていない場合は、それらのオプションを選択します。

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

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

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

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

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

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで、[設定] を選択します。

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

    注記

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

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

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

リスナー

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


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

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

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

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

リスナーを追加するには

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

  2. [Application Load Balancer リスナー] ダイアログボックスで必要な設定を行い、[追加] を選択します。

[Application Load Balancer リスナー] ダイアログボックスを使用して、リスナーがトラフィックをリッスンするポートおよびプロトコル、およびトラフィックのルーティング先となるプロセスを選択します。HTTPS プロトコルを選択する場合、SSL 設定を構成します。


          [Application Load Balancer listener (Application Load Balancer リスナー)] ダイアログボックス

HTTPS リスナーを設定する前に、有効な SSL 証明書を保持していることを確認します。次のいずれかを行ってください。

Elastic Beanstalk における HTTPS の設定と証明書の使用の詳細については、「Elastic Beanstalk 環境の HTTPS の設定」を参照してください。

プロセス

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


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

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

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 (優先度)] - ルールの優先度。数の小さい優先度番号が優先されます。リスナーのルールの優先順位は一意である必要があります。

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

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

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


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

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

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

注記

アクセスログキャプチャ用に設定する Amazon S3 バケットが、自身のアカウント用に Elastic Beanstalk で作成されたバケットではない場合は、適切なアクセス許可を持つユーザーポリシーを、AWS Identity and Access Management (IAM) ユーザーに追加してください。Elastic Beanstalk が提供する管理ユーザーポリシーは、Elastic Beanstalk で管理されるリソースに対するアクセス許可のみを対象としています。

アクセス許可やその他の要件を含むアクセスログの詳細については、「Access logs for your Application Load Balancer (アプリケーションロードバランサーのアクセスログ) 」を参照してください。


          Application Load Balancer の設定 - アクセスリスト

例: セキュアなリスナーと 2 つのプロセスを使用する Application Load Balancer

この例では、アプリケーションにはエンドツーエンドのトラフィック暗号および管理リクエストを処理するための別のプロセスが必要です。

これらの要件を満たすように環境の Application Load Balancer を設定するには、デフォルトのリスナーを削除し、HTTPS リスナーを追加して、デフォルトのプロセスが HTTPS のポート 443 をリッスンするように指定します。また、別のパスに管理トラフィックのプロセスおよびリスナールールを追加します。

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

  1. 安全なリスナーを追加します。 [ポート] に「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 などです。

    [デフォルトプロセス] で、default を選択したままにします。

    
            Application Load Balancer の設定 - セキュアなリスナーの追加

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

    
            Application Load Balancer の設定例 - 2 つのリスナーを含むリスナーリスト
  2. デフォルトのポート 80 HTTP リスナーを無効にします。 デフォルトのリスナーについて、[有効] オプションをオフにします。

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

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

    
            Application Load Balancer の設定例 - 管理プロセスを追加する
  5. 管理トラフィックのルールを追加します。 [名前] に「admin」と入力します。[リスナーポート] に「443」と入力します。[一致条件] には、/admin/* の値で [PathPattern] を追加します。[プロセス] で、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 2):

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

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

Application Load Balancer の名前空間

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

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

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

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

  • aws:elbv2:listener - Application Load Balancer のリスナーを設定します。これらの設定は、Classic 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/alb-access-logs.config

以下の設定ファイルでは、Application Load Balancer を使用した環境用のアクセスログのアップロードが可能になります。

option_settings: aws:elbv2:loadbalancer: AccessLogsS3Bucket: DOC-EXAMPLE-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