はじめに
Google Cloud Run でカスタム
ドメインマッピングの設定方法を理解するため、以下のチュートリアルをやってみた。
カスタム ドメインマッピングを設定するには、Cloud Run
のサービスも必要なので、以下のチュートリアルを合わせて行っている。
マッピング先のドメインは、20230111.i-chi-li.info とする。
チュートリアルを実施している様子を、YouTube にアップロードした。
利用 API
- Cloud Run API
- Artifact Registry API
- Cloud Build API
事前準備
Google Cloud にプロジェクトを作成済みとする。
gcloud コマンドが利用可能とする。
go 言語をインストール済みとする。
git コマンドが利用可能とする。
gcloud コマンドは、以下の設定をしていること。 YOUR_PROJECT_ID は、プロジェクト
ID に置換すること。
gcloud config set project YOUR_PROJECT_ID
gcloud config set artifacts/location asia-northeast1
gcloud config set run/region asia-northeast1
作業用の任意のディレクトリを作成済みとする。ここでは、D:\tmp\tutorials
とする。
チュートリアル実施
利用 API を有効化する
Cloud コンソールで有効化するか、以下のように gcloud コマンドを実行する。
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
サンプル アプリケーションを作成する
ディレクトリを作成する
mkdir golang-samples
cd golang-samples
go モジュールを宣言する
go mod init github.com/i-chi-li/golang-samples
コマンドを実行すると、カレントディレクトリに go.mod ファイルが作成される。
main.go ファイルを作成する
カレントディレクトリに main.go ファイルを以下の内容で作成する。
// Sample run-helloworld is a minimal Cloud Run service.
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
log.Print("starting server...")
http.HandleFunc("/", handler)
// Determine port for HTTP service.
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("defaulting to port %s", port)
}
// Start HTTP server.
log.Printf("listening on port %s", port)
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
name := os.Getenv("NAME")
if name == "" {
name = "World"
}
fmt.Fprintf(w, "Hello %s!\n", name)
}
サンプル アプリケーションを Cloud Run にデプロイする
gcloud run deploy
各種問い合わせには以下のように回答する。
「Allow unauthenticated invocations」行の問い合わせには、y を選択する。
Source code location (D:\tmp\tutorials\golang-samples): (そのまま Enter)
Service name (golang-samples): (そのまま Enter)
Do you want to continue (Y/n)? (そのまま Enter)
Allow unauthenticated invocations to [golang-samples] (y/N)? y
Cloud Run のドメイン マッピングを設定する
マッピングの前に、ドメインの所有権を証明する必要がある。
ここでは、新規に証明する前提とする。
証明する方法はいくつかあるが、ここでは、ドメインホストに TXT
レコードを追加する方法を利用する前提とする。
Cloud コンソールで、「ナビゲーションメニュー」→「Cloud Run」をクリックする。
画面上部の「カスタム ドメインを管理」をクリックする。
画面上部の「マッピングを追加」をクリックすると「マッピングを追加」ダイアログが開く。
マッピングするサービスを選択する。ここでは、golang-samples を選択する。
所有権を証明済みの他ドメインが存在する場合は、確認済みのドメインを選択となる。
「Verify a new
domain...」を選択した場合、「検証するベースドメイン」の選択項目が表示される。
所有権を証明済みの他ドメインが存在しない場合は、検証するベースドメインの入力項目が表示される。
検証するベースドメインを入力する。ここでは、「20230111.i-chi-li.info」とする。
「続行」をクリックする。
「ドメインの所有権確認を実行中です。変更が反映されるまでに数分かかる場合があります。確認手順が終了したら更新するか、Webmaster
Central に移動して手順を確認してください。」と表示される。
その下の「ウェブマスター
セントラルで確認」をクリックすると、別ウィンドウで、ウェブマスター
セントラル画面が開く。
ウェブマスター
セントラル画面では、ベースドメインの所有権を証明する設定方法を確認できる。
「ドメイン
レジストラまたはプロバイダを選択」ドロップダウンで、該当する項目を選択する。
ここでは、AWS の Route53
に設定する前提とするが、選択肢にないため、「その他」を選択する。
以下のような形式の文字列を、TXT レコードに設定する。
「google-site-verification=n5Gcyxxxxxxxxxxxxxxxxxxx」
レコード名が同一の TXT には、メールの SPF
用の値などと合わせて、複数の値を設定できる。
Route53 での設定方法は、「Route 53のTXTレコードに複数値を登録できますか?への対処法」を参照。その他のドメイン
レジストラについては、それぞれの設定方法を確認すること。
ここでは、レコード名「20230111.i-chi-li.info」、レコードタイプ「TXT」、値「"google-site-verification=n5Gcyxxxxxxxxxxxxxxxxxxx"」を登録する。
ウェブマスター セントラル画面の「確認」をクリックする。
所有権の確認ができた後、Cloud Run
の「マッピングを追加」画面に戻り、「確認」をクリックする。
「確認済みドメインを選択」ドロップダウンに、所有権の確認ができたベースドメインが設定される。
「サブドメインを指定」にマッピングしたいドメイン名を設定する。
空欄にすると、ベースドメインにマッピングできる。ここでは、空欄とする。
「続行」をクリックする。
しばらくすると、A
および、AAAA レコードが表示されるので、マッピングしたいドメイン名(ここでは、「20230111.i-chi-li.info」)で
DNS に登録する。
「OK」をクリックする。
10 分程度で、マッピングが完了する。
Cloud Run のインスタンスに接続できるようになるまでは、さらに 10 分程度かかる。
接続確認
ブラウザなどで、マッピングした URL
(ここでは、https://20230111.i-chi-li.info)にアクセスする。
レスポンスに「Hello World!」と表示されれば、正常に設定されている。
後片付け
DNS レコードを削除する
上記手順で登録した TXT、A、AAAA レコードを DNS から削除する。
ウェブマスター セントラルで所有権を確認できたドメインを削除する
ウェブマスター セントラル 画面で、対象のドメインをクリックする。
詳細画面の「確認済みサイト所有者」一覧の処理項目にある「未確認にする」をクリックする。
ダイアログ画面で、「未確認にする」をクリックする。
Cloud Run のドメイン マッピングを削除する
Cloud コンソールで、「ナビゲーションメニュー」→「Cloud Run」をクリックする。
画面上部の「カスタム ドメインを管理」をクリックする。
マッピング先が、「golang-samples」がとなっている行を選択して、上部の「削除」をクリックする。
表示されたダイアログで、「削除」をクリックする。
しばらくすると削除される。
サンプル アプリケーションを Cloud Run から削除する
gcloud run services delete golang-samples
Artifact Registry のリポジトリを削除する
gcloud artifacts repositories delete cloud-run-source-deploy
Cloud Storage のバケットを削除する
以下のコマンドを実行すると、バケットの中身および、バケット自身も削除される。
YOUR_PROJECT_ID の部分をプロジェクト ID に変更すること。
gcloud storage rm --recursive gs://YOUR_PROJECT_ID_cloudbuild/
API を無効化する
gcloud services disable --force run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com