はじめに
この記事では以下のことについて説明しています。
- Cloud Endpointsで独自ドメインを設定する方法
- 独自ドメインの設定方法
(もうここからほぼ Cloud Run functions × TypeScript 開発のタイトルと関係ないやん、みたいなことを話していきます。まぁ側(ガワ)の話ではありますが関係はあるかなと思っておりますので...)
以下の記事の続きに該当します。
上記の記事では公式のやり方になぞって、事前に ESPv2 Cloud Run サービス を gcloud で作成して Terraform の管理化にして...と結構回りくどいことを行なっています。
カスタムドメインを使うとその手順が一気に省けるので結構ラクです。あと自動で生成されるドメインだとテンション上がらないですしね。
簡単にやることを説明します。
- カスタムドメインの用意(お名前.comで既に取得済みである想定)
- Search Consoleでドメインの所有権を確認できるようにする
- Terraform の
local.domain
の修正 - Terraform にドメインマッピングのリソースを追加
- DNS設定の実施
ドメインの用意についての説明は省略します。
Search Consoleでドメインの所有権を確認できるようにする
以下のサイトでカスタムドメインを入力します。
注意ですが、ここで入力するアカウントがGCPのアカウントと同じものになっているか確認してください!
ドメインを入力すると、以下のように TXTレコードが出力されます。このTXTレコードを登録するカスタムドメインを所有するドメインサービスでDNS登録した後に「確認」を押します。
以下のように緑っぽい画面が出ればOKです。
Terraform の local.domain
の修正
本記事で作成した openapi-functions.yml
は Terraform リソースで動的に書き替えるよう実装してあるので、その Terraform の該当部分だけ修正すれば良いです。
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 サービスのページに行き「カスタムドメインを管理」のページに行きましょう。
すると カスタムドメインがSSL証明書のプロビジョニング待ち のステータスになっています。こ操作の列の三点リーダをクリックします。
「DNSレコード」をクリックすると、以下のようにDNSレコードが表示されます。
これを各々ドメインを管理しているサービスで、表示された8つのDNSレコードの登録を行います。登録後15分ぐらい待つと、プロビジョニングが完了して緑のステータスになります。
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 カスタムドメイン名