Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Application Load Balancer でパスベースのルーティングを設定する方法を教えてください。
Application Load Balancer の後ろでいくつかのマイクロサービスを実行しようとしています。URL パスに基づき、特定のターゲットグループにリクエストを転送したいです。
簡単な説明
Application Load Balancer を使用すると、URL に基づいてリクエストをターゲットグループに転送するルールを持つリスナーを作成できます。パスパターンのルールは URL のパスにのみ適用され、URL のクエリパラメータには適用されません。パスパターンの詳細については、「パス条件」を参照してください。
注: この機能は、Classic Load Balancer、Network Load Balancer、Gateway Load Balancer ではサポートされていません。
Application Load Balancer でパスベースのルーティングを確立するには、次の手順を実行します。
- ターゲットグループを作成します。
- リスナールールを設定します。
前提条件
- Amazon Virtual Private Cloud (Amazon VPC) 内で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。詳細については、「Amazon EC2 の開始方法」を参照してください。
- これらの Amazon EC2 インスタンスのターゲットセキュリティグループが、リスナーのポートとヘルスチェックのポートへのアクセスを許可していることを確認します。
- ターゲットグループに登録する Amazon EC2 インスタンスに、アプリケーションをデプロイします。例については、「チュートリアル: AL2023 に LAMP サーバーをインストールする」を参照してください。
- Application Load Balancer を作成します。
解決策
ターゲットグループを作成する
各インスタンスを作成した後、ターゲットグループに登録します。設定されたリスナールールに基づき、Application Load Balancer は指定されたポートとプロトコルに基づいて、登録されたターゲットにリクエストを送信します。ただし、ターゲットを個別に登録するときにポート情報をオーバーライドできます。詳細については、「Application Load Balancer のターゲットグループを作成する」を参照してください。
以下の例では、サービス A とサービス B という 2 つのサービスがあり、これらのサービスを実行するアプリケーションはポート 80 を使用します。サービス A はパス /svcA でアプリケーションを実行し、サービス B はパス /svcB でアプリケーションを実行します。
- プロトコル に HTTP、ポート に 80 を使用する 2 つのターゲットグループを作成します。各グループにはアプリケーションがデプロイされています。
- サービス A を実行する Amazon EC2 インスタンスを target-group-A に登録します。このターゲットグループでは、HealthCheckProtocol を HTTP に、HealthCheckPath を /svcA に設定します。
- サービス B を実行する Amazon EC2 インスタンスを target-group-B に登録します。このターゲットグループでは、HealthCheckProtocol を HTTP に、HealthCheckPath を /svcB に設定します。
ターゲットはいつでもターゲットグループに追加したり、ターゲットグループから削除したりできます。詳細については、「Application Load Balancer のターゲットグループにターゲットを登録する」を参照してください。
ターゲットグループを指定すると、ロードバランサーはアクティブ化されたアベイラビリティーゾーン内のすべてのターゲットの状態を継続的に監視します。ロードバランサーは、正常状態の登録されているターゲットにリクエストをルーティングします。詳細については、「Application Load Balancer のターゲットグループに対するヘルスチェック」を参照してください。
リスナールールの設定
Application Load Balancer のリスナーを作成する際、デフォルトルールに加えて 1 つ以上のルールを定義できます。ルールは、優先度、アクション、および 1 つ以上の条件で構成されます。デフォルトルールでは条件を定義できません。定義したルールにおいて、いずれの条件も満たされない場合はデフォルトルールのアクションが実行されます。
- ルール優先度の詳細については、「ルール優先度の更新」を参照してください。
- ルールアクションの詳細については、「ルールアクションのタイプ」を参照してください。
- ルール条件の詳細については、「ルール条件のタイプ」を参照してください。
Application Load Balancer にパスベースのルーティングを実装するには、リスナールールを設定する必要があります。リクエストをルーティングする場所に基づいて、パスパターンごとに 1 つのルールを設定します。
リスナールールの例
次の例は、サービス A と B 用のリスナールールを示しています。
リスナールール 1: リクエスト URL のパスに /svcA という文字列が含まれている場合は、リクエストを target-group-A に転送します。target-group-A には、指定されたパスでアプリケーションを実行するサービス A が含まれているため、この指定を行います。
リスナールール 2: リクエスト URL のパスに /svcB という文字列が含まれている場合は、リクエストを target-group-B に転送します。target-group-B には、指定されたパスでアプリケーションを実行するサービス Bが含まれているため、この指定を行います。
- 新しい HTTP リスナーを作成する方法については、「Application Load Balancer 用の HTTP リスナーを作成する」を参照してください。
- 新しい HTTPS リスナーを作成する方法については、「Application Load Balancer 用の HTTPS リスナーを作成する」を参照してください。
条件とアクションを使用してリスナールールを更新するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインの [ロードバランシング] で [ロードバランサー] を選択します。
- 該当するロードバランサーを選択し、[リスナーとルール] を選択します。
- リスナーを更新するには、[リスナーとルール] タブを選択し、Protocol:Port 列のテキストを選択し、リスナーの詳細ページを開きます。
- [ルール] タブの [リスナールール] セクションで編集するルールを選択します。
- [アクション] を選択し、[ルールを編集] を選択します。
- [ルールを追加] を選択します。
- 必要に応じて名前とタグを変更します。タグを追加するには、[その他のタグを追加] を選択します。
- [次へ] を選択します。
- /svcA にパスベースのルールを追加するには、[条件の追加] を選択し、[パス] を選択し、パスパターン /svcA を入力します。[確認] を選択します。
- [次へ] を選択します。
- 転送アクションを追加するには、[ルーティングアクション] で [ターゲットグループへの転送] を選択し、メニューでターゲットグループ target-group-A を選択します。
- [次へ] を選択します。
- 適切な優先度を選択します。
- ルールの詳細と更新された設定をレビューします。選択内容に問題がなければ、[変更を保存] を選択します。
パス /svcB では次の変更を行い、上記の手順を繰り返します。
- ステップ 10 では、パスパターン /svcB を入力します。
- ステップ 12 では、ターゲットグループ target-group-B を選択します。
詳細については、「Application Load Balancer のリスナールール」を参照してください。
注: パスベースのルーティングルールは、完全一致を照合します。アプリケーションでリクエストをこれらのパスでさらにルーティングする必要がある場合は、パスベースのルーティングルールの条件にワイルドカードを追加します。/svcA* または /svcB* というパスパターンを使用すると、リクエストをルーティングする際、これらのパスにあるすべてのドキュメントを考慮するようになります。
パスベースのルーティングをテストする
パスベースのルーティングをテストするには、Application Load Balancer の DNS 名をウェブブラウザにコピーし、URL パス /svcAまたは /svcB を追加します。
たとえば、Application Load Balancer の DNS 名が alb-demo-1234567890.us-west-2.elb.amazonaws.com の場合は、
- http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcA はサービス A を返す必要があります。
- http://alb-demo-1234567890.us-west-2.elb.amazonaws.com/svcB はサービス B を返す必要があります。
Application Load Balancer リスナーがリクエストを受信すると、リスナーはパス条件に基づいてそのリクエストを適切なターゲットグループに転送します。
パスベースのルーティングを使用すると、1 つの Application Load Balancer の後ろに複数のマイクロサービスをホストできます。リスナールールとターゲットグループに基づいて、トラフィックを各サービスにルーティングできます。host ヘッダー、user-agent ヘッダー、クエリパラメータ値などの条件に基づいてトラフィックをルーティングすることもできます。詳細については、「AWS Application Load Balancer の高度リクエストルーティング」を参照してください。
関連情報
Application Load Balancer のヘルスチェックに合格できない場合のトラブルシューティング方法を教えてください
- 言語
- 日本語

