URL マップのコンセプト

Google Cloud Platform HTTP(S) ロードバランサでは、URL マップを使用してバックエンド サービスバックエンド バケットに受信リクエストを送信します。

作成する HTTP(S) ロードバランサごとに URL マップが必要です。GCP Console で HTTP(S) ロードバランサを作成する場合、ロードバランサの名前と URL マップは同じになります。各 URL マップは、デフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットにトラフィックを転送します。このデフォルト以外にも、URL に含まれるリクエスト側のホスト名とパスの部分に基づいて、別のバックエンド サービスまたはバックエンド バケットにトラフィックを転送することもできます。

たとえば、https://example.com/video に対するリクエストを 1 つのバックエンド サービスに転送して、https://example.com/audio に対するリクエストを別のバックエンド サービスに転送し、さらに https://example.com/graphics に対するリクエストを Cloud Storage バックエンド バケットに転送する場合、すべてのルーティングを 1 つの URL マップと HTTP(S) ロードバランサで行うことができます。

このドキュメントの説明を読む前に、HTTP(S) 負荷分散の全体的なコンセプトについて十分に理解しておいてください。

このドキュメントでは、HTTPS(S) ロードバランサでの URL マップの機能について説明します。サービス メッシュ用の GCP のフルマネージド トラフィック コントロール プレーンである Traffic Director は、URL マップを使用して、追加の構成パラメータをサポートしています。これらのパラメータの詳細については、Traffic Director のドキュメントをご覧ください。

URL マップについて

リクエストを受信すると、ロードバランサは URL マップの構成に基づいて特定のバックエンド サービスまたはバックエンド バケットにリクエストをルーティングします。

たとえば、次のような設定があるとします。

  • 1 つの IP アドレス。組織へのリクエストはすべて同じ IP アドレスと同じロードバランサに転送されます。トラフィックは、リクエストの URL に基づいてさまざまなバックエンド サービスに転送されます。
  • 2 つのドメイン
    • example.net は、トレーニング動画をホストします。
    • example.org は、組織のウェブサイトをホストします。
  • 4 つのサーバーセット
    • 1 つのサーバーセットは、組織のウェブサイトをホストします(バックエンド サービス: org-site)。
    • 1 つのサーバーセットは、トレーニング動画のウェブサイト全体をホストします(バックエンド サービス: video-site)。
    • 1 つのサーバーセットは、高画質(HD)のトレーニング動画をホストします(バックエンド サービス: video-hd)。
    • 1 つのサーバーセットは、標準画質(SD)のトレーニング動画をホストします(バックエンド サービス: video-sd)。

次の処理を行おうとしています。

  • example.org(または、 以外のドメイン)へのリクエストが org-site バックエンド サービスに送信される。
  • より具体的なパスと一致しない example.net へのリクエストが video-siteバックエンド サービスに送信される。
  • example.net/video/hd/* へのリクエストが video-hd バックエンド サービスに送信される。
  • example.net/video/sd/* へのリクエストが video-sd バックエンド サービスに送信される。
サービス設定の例(クリックして拡大)
サービス設定の例(クリックして拡大)

これを設定する URL マップを作成できます。次のセクションでは、この URL マップのコンポーネントについて説明します。

URL マップのコンポーネント

URL マップは、URL へのリクエストをバックエンド サービスまたはバックエンド バケットに転送するための GCP 構成リソースです。処理する URL ごとにホスト名とパスの部分を使用します。

  • ホスト名: ホスト名は URL のうちのドメイン名の部分です。たとえば、http://example.net/video/hd という URL のホスト名の部分は example.net です。
  • パス: パスは URL のうちのホスト名の後の部分です。たとえば、http://example.net/video/hd という URL のパスの部分は /video/hd です。

受信リクエストを転送するバックエンド サービスまたはバックエンド バケットは、次の URL マップ構成パラメータで制御します。

基本的な URL マップフロー(クリックして拡大)
基本的な URL マップフロー(クリックして拡大)
  • デフォルトのサービスまたはデフォルトのバックエンド バケット: URL マップを作成するときに、デフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットのいずれかを指定する必要があります。適用可能なホストルールがない限り、GCP はホスト名を含む URL へのリクエストをこのデフォルトのバックエンド サービスまたはバケットに送信します。

  • ホストルール: ホストルールは、関連する 1 つ以上のホスト名に送信されたリクエストを単一のパスマッチャーに送信します。URL のホスト名の部分は、ホストルールのホスト名のセットと完全に一致します。http://example.net/video/hd へのリクエストをパスマッチャーに送信するには、少なくとも example.net というホスト名を含むホストルールが必要です。このホストルールでは、他のホスト名へのリクエストも処理できますが、同じパスマッチャーに送信します。リクエストを別のパスマッチャーに送信する場合は、別のホストルールを使用する必要があります。URL マップ内の 2 つのホストルールに同じホスト名を含めることはできません。 ホストルールでワイルドカード文字 * 指定すると、すべてのホスト名を照合できます。たとえば、http://example.orghttp://example.net/video/hdhttp://example.com/audio という URL の場合、ホストルールに * を指定すると、example.orgexample.netexample.com の 3 つのホスト名すべてに一致します。ワイルドカード文字 * を使用して、部分的なホスト名を照合することもできます。たとえば、ホストルール *.example.netfoo.example.netbar.example.net の両方のホスト名に一致します。

  • パスマッチャー: パスマッチャーは、ホストルールで参照される構成パラメータです。URL のパス部分と、リクエストを処理するバックエンド サービスまたはバックエンド バケットとの関係を定義します。パスマッチャーは、次の 2 つの要素で構成されます。

    • パスマッチャーのデフォルト サービスまたはパスマッチャーのデフォルトのバックエンド バケット: パスマッチャーには、デフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットのいずれかを指定する必要があります。両方は指定できません。GCP は、パスマッチャーで関連付けられたホストルールに一致し、かつ、URL パスがパスマッチャーの任意のパスルールに一致しない URL へのリクエストをこのデフォルトのバックエンド サービスまたはバケットに送信します。

    • パスルール: 各パスマッチャーに、URL パスを 1 つのバックエンド サービスまたはバックエンド バケットにマッピングする 1 つ以上のパスルール(Key-Value ペア)を指定できます。次のセクション、オペレーションの順序では、パスルールの機能を詳しく説明します。

オペレーションの順序

リクエストされた URL のホスト名とパスに対して、GCP は次の手順に従って、URL マップに構成された正しいバックエンド サービスまたはバックエンド バケットにリクエストを送信します。

  • URL マップに URL のホスト名のホストルールが含まれていない場合、GCP は、URL マップのデフォルト バックエンド サービスまたはデフォルト バックエンド バケットにリクエストを送信します。送信先は定義によって異なります。

  • URL マップに、URL のホスト名を含むホストルールが含まれている場合、そのホストルールで参照されるパスマッチャーが使用されます。

    • パスマッチャーに URL パスと完全に一致するパスルールが含まれている場合、GCP は、そのパスルールのバックエンド サービスまたはバックエンド バケットにリクエストを送信します。

    • パスマッチャーに、URL のパスに完全に一致するパスルールが含まれず/* で終わるパスルールが含まれていて、プリフィックスが URL のパスの最長部分と一致する場合、GCP はそのパスルールのバックエンド サービスまたはバックエンド バケットにリクエストを送信します。たとえば、2 つのパスマッチャー ルール /video/hd/movie1/video/hd/* を含む URL マップの場合、URL に正確なパス /video/hd/movie1 が含まれている場合、そのパスルールと照合されます。

    • 前の条件のどちらも true でない場合、GCP は、パスマッチャーのデフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットにリクエストを送信します。送信先は定義によって異なります。

パスマッチャーの制約

パスマッチャーとパスルールには、次のような制約があります。

  • パスルールでは、スラッシュ文字(/)の後にのみワイルドカード文字(*)を使用できます。たとえば、/videos/*/videos/hd/* は有効なパスルールですが、/videos*/videos/hd* は無効です。

  • パスルールでは、正規表現や部分文字列の一致は使用されません。たとえば、/videos/hd または /videos/hd/* パスルールは、パスが /video/hd-abcd の URL には適用されません。ただし、そのパスには /video/* のパスルールが適用されます。

  • パスマッチャーと一般的な URL マップには、Apache LocationMatch ディレクティブのような機能はありません。共通のプリフィックスを持つ動的 URL パス(たとえば /videos/hd-abcd/videos/hd-pqrs)を生成するアプリケーションで、これらのパスに対するリクエストを別のバックエンド サービスに送信する必要がある場合、URL マップではその目的は達成できません。動的 URL の非常に少ないシンプルなケースでは、限定的なパスルールのセットを使用してパスマッチャーの作成が可能な場合もあります。より複雑なケースでは、バックエンド VM で正規表現を使用してパスの照合を行います。

ホスト名は 1 つのホストルールのみを参照し、ホストルールは 1 つのパスマッチャーのみを参照します。ただし、1 つのホストルールで複数のホスト名を処理できます。また、1 つのパスマッチャーは複数のホストルールから参照可能です。そのため、各 URL は 1 つのバックエンド サービスまたはバックエンド バケットにのみ転送されます。

  • GCP は、URL のホスト名部分を使用して、1 つのホストルールと関連するパスマッチャーを 1 つ選択できます。
  • パスマッチャーでは、同じパスに複数のパスルールを作成することはできません。たとえば、/videos/hd リクエストを複数のバックエンド サービスやバックエンド バケットに転送することはできません。バックエンド サービスは、異なるゾーンやリージョンにバックエンド インスタンス グループまたはバックエンド ネットワーク エンドポイント グループを持つことができます。また、マルチリージョン ストレージ クラスを使用するバックエンド バケットを作成できます。

URL マップとプロトコル

URL マップがターゲット HTTP プロキシとターゲット HTTPS プロキシの両方で参照されている場合、同じ URL マップ、ホストルール、パスマッチャー ツールを使用して、クライアントから送信された HTTP リクエストと HTTPS リクエストを処理できます。

URL マップは、クライアントとロードバランサ間の接続に、プロトコル リダイレクトを提供しません。たとえば、URL マップを使用してクライアント システムに HTTP から HTTPS への切り替えを指示することはできません。すべてのクライアント プロトコル リダイレクトをバックエンド VM に実装する必要があります。

最も簡単な URL マップ

最も単純な URL マップは、デフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットだけで構成されています。ホストルールもパスマッチャーもありません。リクエストされた URL は、デフォルトのバックエンド サービスまたはデフォルトのバックエンド バケットのいずれかで処理されます。

デフォルトのバックエンド サービスを定義すると、GCP はバックエンド サービスの構成に従ってバックエンド インスタンス グループまたはバックエンド ネットワーク エンドポイント グループにリクエストを送ります。

デフォルト以外のルールがない URL マップ(クリックして拡大)
デフォルト以外のルールがない URL マップ(クリックして拡大)

URL マップの例

次の例は、URL マップのオペレーションの順序を示しています。説明を簡単にするため、ここでは、バックエンド サービスのみを使用します。バックエンド バケットで代用することも可能です。

次の手順では、GCP HTTP(S) ロードバランサの URL マップを作成します。HTTP(S) ロードバランサの他のコンポーネントの作成方法の例については、コンテンツ ベースのクロスリージョン負荷分散の作成をご覧ください。この例で説明するバックエンド サービスは外部のスキームを持ち、HTTP、HTTPS、または HTTP/2 プロトコルを使用します。

  1. ロードバランサの URL マップを作成し、デフォルトのバックエンド サービスを指定します。 この例では、org-site という既存のバックエンド サービスを参照する video-org-url-map という URL マップを作成します。

    gcloud compute url-maps create video-org-url-map \
        --default-service=org-site
    
  2. 次の特性を持つ video-matcher という名前のパスマッチャーを作成します。

    • デフォルトのバックエンド サービスは、既存の video-site というバックエンド サービスになります。
    • 正確な URL パス /video/hd または URL パスのプリフィックス /video/hd/* のリクエストを video-hd という名前の既存のバックエンド サービスに転送するパスルールを追加します。
    • 正確な URL パス /video/sd または URL パスのプリフィックス /video/sd/* のリクエストを video-sd という名前の既存のバックエンド サービスに転送するパスルールを追加します。
    gcloud compute url-maps add-path-matcher video-org-url-map \
        --path-matcher-name=video-matcher \
        --default-service=video-site \
        --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd
    
  3. video-matcher パスマッチャーを参照する example.net というホスト名のホストルールを作成します。

    gcloud compute url-maps add-host-rule video-org-url-map \
        --hosts=example.net \
        --path-matcher-name=video-matcher
    

video-org-url-map URL マップは、リクエストされた URL を次の方法でバックエンドに送信します。

パスルール、パスマッチャー、ホストルールを含む URL マップ(クリックして拡大)
パスルール、パスマッチャー、ホストルールを含む URL マップ(クリックして拡大)

GCP が URL のリクエストを処理する方法は次のとおりです。

ホスト名 URL パス 選択されたバックエンド サービス 選択の理由
ホスト名
example.org。また、example.net と異なるその他のホスト名。
すべてのパス org-site ホスト名が URL マップのホストルールにないため、リクエストは URL マップのデフォルトのバックエンド サービスに転送されます。
ホスト名:
example.net
/video
/video/examples
video-site /video/ または /video/* のパスルールがないため、リクエストはデフォルトのバックエンド サービスに移動します。example.net のホストルールはパスマッチャーを参照しますが、これらのパスに適用されるパスルールはありません。
ホスト名:
example.net
/video/hd
/video/hd/movie1
/video/hd/movies/movie2
先頭が /video/hd/* のその他の URL
video-hd example.net のホストルールはパスルールのパスマッチャーを参照しています。このパスルールにより、/video/hd と完全に一致する URL パスか、/video/hd/* で始まる URL パスへのリクエストを video-hd バックエンド サービスに送信します。
ホスト名:
example.net
/video/sd
/video/sd/show1
/video/sd/shows/show2
先頭が /video/sd/* のその他の URL
video-sd example.net のホストルールはパスルールのパスマッチャーを参照しています。このパスルールにより、/video/sd と完全に一致する URL パスか、/video/sd/* で始まる URL パスへのリクエストを video-sd バックエンド サービスに送信します。

** 追加情報

ロードバランサでは、Traffic Director のドキュメントで説明されている一部の URL マップ機能は使用できません。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...