dispatch.yaml 構成ファイル

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。

詳しくは、リージョン ID をご覧ください。

ルーティング ルールをオーバーライドするには、dispatch.yaml を使用します。dispatch.yaml を使用すると、URL 内のパスまたはホスト名に基づいて、特定のサービス(以前はモジュールと呼ばれていました)に受信リクエストを送信できます。

詳細については、リクエストのルーティング方法をご覧ください。

アプリに含めることができるのは 1 つの dispatch.yaml ファイルのみです。そのファイル内のルーティング ルールは、すべてのアプリのサービスとバージョンに適用されます。ルーティング ルールは、cron ファイルで使用される URL にも適用されます。

ディスパッチ ファイルのデプロイ

ディスパッチ ファイルをデプロイする前に、そのファイルに定義されているすべてのサービスがすでに App Engine にデプロイされていることを確認する必要があります。dispatch.yaml ファイルをデプロイするには、dispatch.yaml を含むディレクトリから gcloud app deploy コマンドを実行します。

gcloud app deploy dispatch.yaml

デプロイ コマンドの詳細については、アプリのデプロイをご覧ください。

構文

dispatch.yaml ファイル内のルート要素は dispatch: であり、以下に示すサブ要素で指定されるルーティング定義の一覧を含みます。

ディスパッチ ファイルで定義するルールは、HTTP URL パターンを使用し、サブドメインの区切りに「.」を使用する必要があります。HTTPS の「-dot-」表記で定義した URL はサポートされません。

ディスパッチ ルールは順序に依存し、URL に一致する最初のルールのみが適用されます。

要素 説明
service

url パターンに一致したリクエストを処理するサービスの名前を指定します。サービスは、以前はモジュールと呼ばれていました。

url

url 要素には、URLパターン、100 文字以下のホスト名と URL パスを含めることができるを定義します。

service 要素では、url 要素の URL パターンと一致する受信リクエストを処理するサービス名を指定します。

ヒント: url 要素では、* ワイルドカード文字などの glob パターンを定義できますが、これらのパターンはホスト名の前と URL パスの最後でのみ使用できます。

/_ah/ で始まる URL パスは、ディスパッチ ファイルによってルーティングされません。

以下のディスパッチ ファイルのサンプルでは、https://simple-sample.uc.r.appspot.com 宛てのリクエストや、https://simple-sample.uc.r.appspot.com/favicon.ico などのリクエストを default サービスにルーティングしています。すべての静的コンテンツが、default サービスから配信されます。https://simple-sample.uc.r.appspot.com/mobile/ などのモバイル リクエストはモバイル フロントエンドにルーティングされ、https://simple-sample.uc.r.appspot.com/work/ などのワーカー リクエストは静的バックエンドにルーティングされます。

例:

dispatch:
  # Default service serves the typical web resources and all static resources.
  - url: "*/favicon.ico"
    service: default

  # Default service serves simple hostname request.
  - url: "simple-sample.uc.r.appspot.com/"
    service: default

  # Send all mobile traffic to the mobile frontend.
  - url: "*/mobile/*"
    service: mobile-frontend

  # Send all work to the one static backend.
  - url: "*/work/*"
    service: static-backend

多数のリクエストに一致する可能性がある汎用的なルーティング ルールが適切である場合は、より広いスコープでルールを定義できます。

例:

# Send any path that begins with “simple-sample.uc.r.appspot.com/mobile” to the mobile-frontend service.
- url: "simple-sample.uc.r.appspot.com/mobile*"
  service: mobile-frontend

# Send any domain/sub-domain with a path that starts with “work” to the static backend service.
- url: "*/work*"
  service: static-backend

次のように、より厳密な式を記述することもできます。

例:

# Matches the path "/fun", but not "/fun2" or "/fun/other"
- url: "*/fun"
  service: mobile-frontend

# Matches the hostname 'customer1.myapp.com', but not '1.customer1.myapp.com.
- url: "customer1.myapp.com/*"
  service: static-backend

受信ドメイン リクエストをサービスにリダイレクトするルールを作成できます。次のルールは、customer1.myapp.com からの受信リクエストをデフォルト サービスに、サブドメインからの受信リクエストを静的バックエンド サービスにそれぞれルーティングします。

例:

# Matches the domain name 'customer1.myapp.com' and directs all the request to default service 
- url: "customer1.myapp.com/*"
  service: default

# Matches all the subdomains of 'customer1.myapp.com' and directs all the request to static-backend service
- url: "*.customer1.myapp.com/*"
  service: static-backend

上限

ディスパッチ ファイルには最大 20 個のルーティング ルールを含めることができます。URL 文字列を指定するときに、100 文字を超えるホスト名やパスは使用できません。

すべてのディスパッチ ルールの削除

すべてのディスパッチ ルールを削除するには:

  1. dispatch.yaml ファイルの内容を次のように編集します。

    dispatch: []
    
  2. dispatch.yaml ファイルを App Engine にデプロイします。