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 を使用しているとき、Elastic Beanstalk は、デフォルトで 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 ヘルスチェックは、Elastic Beanstalk のヘルスチェックパスを使用しません。代わりに、各プロセス用に別々に設定された特定のパスを使用します。

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

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

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

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

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

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

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

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

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

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

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

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

  9. [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 が AWS リージョンで使用可能である場合は、AWS Certificate Manager (ACM) を使用して証明書を作成またはインポートします。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 ヘルスチェックの設定」を参照してください。

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

セッション

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


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

ルール

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

ルールには着信するリクエストに適用されるべき優先度を決定する優先順位の数字があります。追加する新しいリスナーごとに、Elastic Beanstalk はリスナーのトラフィックのすべてをデフォルトのプロセスにルートするデフォルトのルールを追加します。このデフォルトのルールの優先順位は最も低く、着信するリクエストに一致する他のルールが同じリスナーにない場合にのみ適用されます。初期状態では、このリストにはデフォルト HTTP ポート 80 リスナーのデフォルトのルールが表示されます。


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

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

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

  • [リスナーポート] – ルールが適用されるリスナーのポート。

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

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

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

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


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

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

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


          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 などです。

    
              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/* と入力します。[プロセス] で 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