0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run functions × TypeScript 開発をしよう!Advent Calendar 2024

Day 18

Cloud Run functions × TypeScript 開発をしよう!【発展編:Cloud Endpointsで Cloud Run functions に独自ドメインを設定する】

Last updated at Posted at 2024-12-22

はじめに

この記事では以下のことについて説明しています。

  • Cloud Endpointsで独自ドメインを設定する方法
  • 独自ドメインの設定方法

(もうここからほぼ Cloud Run functions × TypeScript 開発のタイトルと関係ないやん、みたいなことを話していきます。まぁ側(ガワ)の話ではありますが関係はあるかなと思っておりますので...)


以下の記事の続きに該当します。

上記の記事では公式のやり方になぞって、事前に ESPv2 Cloud Run サービス を gcloud で作成して Terraform の管理化にして...と結構回りくどいことを行なっています。
カスタムドメインを使うとその手順が一気に省けるので結構ラクです。あと自動で生成されるドメインだとテンション上がらないですしね。

簡単にやることを説明します。

  • カスタムドメインの用意(お名前.comで既に取得済みである想定)
  • Search Consoleでドメインの所有権を確認できるようにする
  • Terraform の local.domain の修正
  • Terraform にドメインマッピングのリソースを追加
  • DNS設定の実施

ドメインの用意についての説明は省略します。

Search Consoleでドメインの所有権を確認できるようにする

以下のサイトでカスタムドメインを入力します。

注意ですが、ここで入力するアカウントがGCPのアカウントと同じものになっているか確認してください!

スクリーンショット 2024-12-23 1.17.43.png

ドメインを入力すると、以下のように TXTレコードが出力されます。このTXTレコードを登録するカスタムドメインを所有するドメインサービスでDNS登録した後に「確認」を押します。

スクリーンショット 2024-12-23 1.18.07.png

以下のように緑っぽい画面が出ればOKです。

スクリーンショット 2024-12-23 1.17.53.png

Terraform の local.domain の修正

本記事で作成した openapi-functions.yml は Terraform リソースで動的に書き替えるよう実装してあるので、その Terraform の該当部分だけ修正すれば良いです。

locals.domain の書き換え
locals {
  project         = "advent-calendar-2024-w"
  region          = "asia-northeast1"
  zone            = "asia-northeast1-a"
  domain          = "独自ドメインに書き換え"
  ESPv2_image_ver = "2.51.0"
}

Terraformにドメインマッピングのリソースを追加

以下のリソースを追加しましょう。

ドメインマッピングに関するリソース
resource "google_cloud_run_domain_mapping" "default" {
  location = local.region
  name     = local.domain

  metadata {
    namespace = local.project
  }

  spec {
    route_name = google_cloud_run_v2_service.gateway.name
  }
}

ここまで終わったら terraform apply しましょう。

Apply complete! Resources: 5 added, 0 changed, 0 destroyed.

Outputs:

function_uri = "https://xxx.a.run.app"
gateway_uri = "https://yyy.a.run.app"

DNS設定の実施

そして Cloud Run サービスのページに行き「カスタムドメインを管理」のページに行きましょう。

スクリーンショット 2024-12-23 1.02.35.png

すると カスタムドメインがSSL証明書のプロビジョニング待ち のステータスになっています。こ操作の列の三点リーダをクリックします。

スクリーンショット 2024-12-23 1.07.43.png

「DNSレコード」をクリックすると、以下のようにDNSレコードが表示されます。

スクリーンショット 2024-12-23 1.10.45.png

これを各々ドメインを管理しているサービスで、表示された8つのDNSレコードの登録を行います。登録後15分ぐらい待つと、プロビジョニングが完了して緑のステータスになります。

スクリーンショット 2024-12-23 1.13.31.png

APIを呼び出す

緑マークになってすぐはリクエストがまだ通らない状態です。20分くらい待ってリクエストしてみましょう。

curl -H 'x-api-key: APIキー' https://カスタムドメイン/hello

すると以下のようなメッセージが出ます。

{
    "code": 403,
    "message": "PERMISSION_DENIED: API api.tenkawa-k.com is not enabled for the project."
}

あら?そういえば APIキー を使えるエンドポイントの制限を変えていませんでしたね。と言うことで変更しましょう。

対象のAPIキーのIDを確認します。

gcloud services api-keys list

カスタムドメインに対してAPIキーを有効にします。

gcloud services api-keys update APIキーのID --api-target=service=カスタムドメイン名

実行後すぐには反映されないので、15分くらい待ってから呼び出してみましょう。

$ curl -H "x-api-key:APIキー" https://カスタムドメイン名/hello
Hello, World!

無事、呼び出すことができました。

参考

おまけ

APIキーのリソースは Terraform 管理もできます。やってみましょう。

トラブルシューティング

PERMISSION_DENIED: API ドメイン名 is not enabled for the project

以下を実行してあげましょう。

gcloud services enable カスタムドメイン名
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?