カスタム ドメインのマッピング

デプロイされたサービスに Cloud Run が提供するデフォルトのアドレスではなく、カスタム ドメインを設定できます。

Cloud Run サービスのカスタム ドメインを設定するには、いくつかの方法があります。

複数のカスタム ドメインを同じ Cloud Run サービスにマッピングできます。

始める前に

使用するドメインをまだ所有していない場合、新しいドメインを購入してください。どのドメイン名登録事業者でも使用できます。

グローバル外部アプリケーション ロードバランサを使用してカスタム ドメインをマッピングする

このオプションでは、Cloud Run サービスの前にグローバル外部アプリケーション ロードバランサを追加し、ロードバランサ レベルでカスタム ドメインを構成します。

グローバル外部アプリケーション ロードバランサを使用するメリットの 1 つは、カスタム ドメインの設定に関して多くの制御が可能であることです。たとえば、独自の TLS 証明書の使用や、特定の URL パスの Cloud Run サービスへのルーティングができます。また、キャッシュ用に Cloud CDN を構成し、セキュリティを高めるために Google Cloud Armor を構成することもできます。

また、URL マスクを使用して、単一ロードバランサのカスタム ドメイン URL パターンで、複数のサービスを動的ホスト名またはパスにマッピングできます(例: <service>.example.com)。

現在、グローバル外部アプリケーション ロードバランサを使用していない場合は、Cloud Run の統合機能を使用して、Cloud Run サービスのロードバランサを簡単に設定できます。グローバル外部アプリケーション ロードバランサを使用する Cloud Run のカスタム ドメインの統合ページをご覧ください。グローバル外部アプリケーション ロードバランサをすでに使用している場合は、Cloud Run を使用したグローバル外部アプリケーション ロードバランサの設定のドキュメントをご覧ください。統合機能を使用すると、CDN 有効化などの既存のロードバランサの構成の一部が上書きされる可能性があります。

Firebase Hosting を使用してカスタム ドメインをマッピングする

Firebase Hosting を使用してカスタム ドメインをマッピングする最も簡単な方法は、Firebase Hosting の Cloud Run インテグレーション機能を使用する方法です。Firebase Hosting のインテグレーション機能を使用しない場合は、手動で Firebase Hosting を構成することもできます。

このオプションでは、Cloud Run サービスの前に Firebase Hosting を構成し、構成ドメインを Firebase Hosting に接続します。

Firebase Hosting の使用は低価格で、必要に応じて Cloud Run サービスによって提供される動的コンテンツとともに静的コンテンツをホストして提供できます。

Firebase Hosting を使用してカスタム ドメインをマッピングするには:

  1. Firebase を Google Cloud プロジェクトに追加する
  2. Firebase CLI をインストールする
  3. サービスのソースコードとは異なるフォルダに firebase.json ファイルを作成し、次の内容を追加する。

      {
        "hosting": {
          "rewrites": [{
            "source": "**",
            "run": {
              "serviceId": "SERVICE_NAME",
              "region": "REGION"
            }
          }]
        }
      }
    

    SERVICE_NAMEREGION を Cloud Run サービスの名前とリージョンに置き換える。

  4. Firebase Hosting の構成をデプロイする。

    firebase deploy --only hosting --project PROJECT_ID
  5. カスタム ドメインを Firebase Hosting に接続する

Firebase Hosting と Cloud Run の詳細をご覧ください。

Cloud Run のドメイン マッピングを使用してカスタム ドメインをマッピングする(限定的に利用可能、プレビュー)

Cloud Run のドメイン マッピングの制限事項

Cloud Run のドメイン マッピングでは、次の点を考慮する必要があります。

  • Cloud Run のドメイン マッピングは、プレビュー リリース ステージです。レイテンシの問題で本番環境に対応していないため、一般提供ではサポートされていません。現時点では、このオプションは本番環境のサービスにはおすすめしません。
  • サービスをカスタム ドメインにマッピングすると、HTTPS 接続用の Google マネージド証明書が自動的に発行され、更新されます。
  • SSL 証明書のプロビジョニングには通常 15 分ほどかかりますが、場合によっては最長で 24 時間ほどかかることがあります。
  • TLS 1.0 と 1.1 を無効にすることはできません。これが問題となる場合は、Firebase Hosting または Cloud Load Balancing を使用して、TLS 1.2 のみのトラフィックを有効にできます。
  • 独自の(セルフマネージド)証明書をアップロードして使用することはできません。
  • Cloud Run のドメイン マッピングは 64 文字に制限されています。
  • ドメイン マッピングは次のリージョンで利用できます。
    • asia-east1
    • asia-northeast1
    • asia-southeast1
    • europe-north1
    • europe-west1
    • europe-west4
    • us-central1
    • us-east1
    • us-east4
    • us-west1
  • 他のリージョンのカスタム ドメインをマッピングするには、他のマッピング オプションのいずれかを使用する必要があります。
  • Cloud Run のドメイン マッピングを使用する場合、カスタム ドメインをサービスにマッピングしてから DNS レコードを更新します。
  • example.com のようなドメインや、subdomain.example.com のようなサブドメインをマッピングできます。
  • ドメインは / にのみマッピングでき、/users のような特定の URL パスにマッピングすることはできません。
  • この機能でワイルドカード証明書を使用することはできません。

カスタム ドメインとサービスのマッピング

カスタム ドメインをサービスにマッピングするには、Google Cloud コンソール、gcloud CLI、または Terraform を使用します。

コンソール

  1. Google Cloud コンソールで [ドメイン マッピング] ページを開きます。
    [ドメイン マッピング] ページ

  2. [マッピングを追加] をクリックします。

    表示ウィンドウが小さすぎると、[マッピングを追加] ボタンは表示されないので、ページの右上にあるその他アイコンをクリックする必要があります。

  3. プルダウン リストから、カスタム ドメインのマッピング先のサービスを選択します。

  4. 選択したサービスに設定されているリージョンに応じて、カスタム ドメインを追加するためのオプションが表示されます。

    • Cloud Run のインテグレーションを使用した Firebase Hosting
    • カスタム ドメイン - Cloud Run のインテグレーションを使用した Google Cloud Load Balancing
    • Cloud Run のドメイン マッピング

    [Cloud Run のドメイン マッピング] を選択します。

  5. [マッピングを追加] フォームで、[新しいドメインの所有権を証明] を選択します。

  6. Google からドメインを購入した場合を除き、ドメインが使用可能になる前に、[検証するベースドメイン] フィールドでドメインの所有権を確認する必要があります。

    subdomain.example.com または subdomain1.subdomain2.example.com をマッピングする場合は、example.com の所有権を確認してください。ドメインの所有権を確認する方法については、Search Console のヘルプをご覧ください。

  7. [続行] をクリックします。

  8. ドメインの所有権の証明が完了したら、[検証を続行して閉じる] をクリックします。

  9. ドメイン登録事業者のウェブサイトで、最後の手順で表示された DNS レコードを使用して DNS レコードを更新します。ドメイン マッピングの操作メニュー [...] で [DNS レコード] をクリックすると、レコードが表示されます。

  10. [完了] をクリックします。

コマンドライン

  1. Google からカスタム ドメインを購入した場合を除き、Google Cloud プロジェクトでそのドメインを初めて使用する際には、ドメインの所有権を確認する必要があります。使用するカスタム ドメインが確認済みかどうかを判別するには、コマンドを使用します。

    gcloud domains list-user-verified

    ドメインの所有権を確認する必要がある場合は、Search Console の確認ページを開きます。

    gcloud domains verify BASE-DOMAIN

    ここで、BASE-DOMAIN は確認するベースドメインです。たとえば、subdomain.example.com をマッピングする場合は、example.com の所有権を確認する必要があります。

    Search Console でドメイン所有権の確認を完了します。詳細については、Search Console のヘルプをご覧ください。

  2. サービスをカスタム ドメインにマッピングします。

    gcloud beta run domain-mappings create --service SERVICE --domain DOMAIN
    • SERVICE は、実際のサービス名に置き換えます。
    • DOMAIN は、カスタム ドメイン(example.com または subdomain.example.com など)に置き換えます。

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Cloud Run サービスを作成するには、既存の main.tf ファイルに次の行を追加します。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloud-run-srv"
  location = "us-central1"
  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

name の値は実際のサービス名に置き換えます。

Cloud Run サービスをカスタム ドメインにマッピングします。

data "google_project" "project" {}

resource "google_cloud_run_domain_mapping" "default" {
  name     = "verified-domain.com"
  location = google_cloud_run_v2_service.default.location
  metadata {
    namespace = data.google_project.project.project_id
  }
  spec {
    route_name = google_cloud_run_v2_service.default.name
  }
}

verified-domain.com は、確認済みのカスタム ドメイン(example.comsubdomain.example.com など)に置き換えます。

ドメイン登録事業者で DNS レコードを追加する

Cloud Run でサービスをカスタム ドメインにマッピングしたら、ドメイン登録事業者で DNS レコードを更新する必要があります。Cloud Run が必要な DNS レコードを生成して表示します。マッピングを有効にするには、Cloud Run サービスを参照するレコードをドメイン登録事業者で追加する必要があります。

DNS プロバイダとして Cloud DNS を使用する場合は、レコードの追加をご覧ください。

  1. 次のコマンドを使用して、ドメイン マッピングの DNS レコード情報を取得します。

    コンソール

    1. Cloud Run のドメイン マッピング ページに移動:
      ドメイン マッピング ページ

    2. サービスの右側にある縦に並んだ 3 つの点のアイコンをクリックして [DNS レコード] をクリックし、すべての DNS レコードを表示します。

    DNS レコードを選択

    コマンドライン

    gcloud beta run domain-mappings describe --domain [DOMAIN]

    [DOMAIN] は、カスタム ドメイン(example.comsubdomain.example.com など)に置き換えます。

    resourceRecords という見出しの下にある、返されたすべてのレコードが必要です。

  2. ドメイン登録事業者のアカウントにログインし、DNS 構成ページを開きます。

  3. ドメインの構成ページのホストレコード セクションを見つけて、ドメインを Cloud Run サービスにマッピングしたときに取得した各リソース レコードを追加します。

  4. 上記の DNS レコードを DNS プロバイダのアカウントに追加するときに、次の操作を行います。

    • 前のステップで返された DNS レコードのタイプを選択します(AAAAA または CNAME)。
    • www という名前を使用して www.example.com にマッピングします。
    • @ という名前を使用して example.com をマッピングします。
  5. ドメインのアカウントの DNS 構成ページで変更を保存します。通常、この変更が反映されるまでに数分しかかかりませんが、登録事業者やドメインの以前の DNS レコードに設定されている有効期間(TTL)によっては、数時間かかることもあります。このオンラインの dig バージョンなどの dig ツールを使用して、DNS レコードが正常に更新されたことを確認できます。

  6. 新しい URL(https://www.example.com など)でサービスを閲覧して、成功したかどうかをテストします。マネージド SSL 証明書が発行されるまでに数分かかる場合があります。

確認済みのドメイン所有者を他のユーザーまたはサービス アカウントに追加する

ユーザーがドメインを検証すると、そのユーザーのアカウントに対してのみドメインの検証が行われます。つまり、ドメイン マッピングを追加できるのは、そのドメインを使用しているユーザーだけです。他のユーザーがドメインを使用するマッピングを追加できるようにするには、ユーザーを確認済みのオーナーとして追加する必要があります。

ドメインで確認済みのオーナーを他のユーザーまたはサービス アカウントに追加するには、Search Console のページから権限を追加します。

  1. ウェブブラウザで、このアドレスに移動します。

    https://search.google.com/search-console/welcome

  2. [プロパティ] で、ユーザーまたはサービス アカウントを追加するドメインをクリックします。

  3. [確認済みサイト所有者] リストまでスクロールして [サイト所有者を追加] をクリックし、Google アカウントのメールアドレスまたはサービス アカウント ID を入力します。

    サービス アカウントのリストを表示するには、Google Cloud コンソールの [サービス アカウント] ページを開きます。

    [サービス アカウント] ページに移動

Cloud Run ドメイン マッピングを削除する

ドメイン マッピングを削除するには、Google Cloud コンソールまたは gcloud コマンドライン ツールを使用します。

コンソール

  1. Google Cloud コンソールで [ドメイン マッピング] ページを開きます。
    [ドメイン マッピング] ページ

  2. [ドメイン マッピング] ページで、削除するドメイン マッピングを選択し、[削除] をクリックします。

コマンドライン

  1. ドメイン マッピングを削除します。

    gcloud beta run domain-mappings delete --domain DOMAIN
    • DOMAIN は、カスタム ドメイン(example.com または subdomain.example.com など)に置き換えます。

認証済みサービスでのカスタム ドメインの使用

認証済みサービスは IAM によって保護されます。このような Cloud Run サービスでは、認証情報の生成時にリクエストの対象とする受信者(オーディエンス)を宣言するクライアント認証が必要です。

オーディエンスは通常ターゲット サービスの正式な URL であり、Cloud Run サービスの場合、デフォルトでは末尾が run.app の URL が生成されます。ただし、カスタム ドメインを使用する場合、自動生成された run.app URL をオーディエンスとして使用しないでください。代わりに、カスタム ドメインを有効な認証オーディエンスとして受け入れるように、カスタム オーディエンス用のサービスを構成します。

次のステップ

  • Terraform でグローバル外部アプリケーション ロードバランサを使用して Cloud Run のカスタム ドメインを設定する。このサンプルコードをご覧ください。