2019年2月24日日曜日

GAE でカスタムドメインにサブドメインを使う場合はちゃんとサブドメインをゾーン管理しなければならない

概要

何がしたいかと言うと https://random.kakakikikeke.com というドメインで GAE にアクセスできるようにしたいわけです
GAE にはカスタムドメインの機能があり好きなドメインを割り当てることができます
今回はサブドメインを使いたいわけです

で、サブドメインを GAE に割り当てたい場合は割り当てたいサブドメインをちゃんとゾーン管理しないとダメでしたという話です
考えれば当然かもしれませんが結構ハマる人というか勘違いする人が多いんじゃないかなと思いました

すでにドメインの管理を Route53 などにしている場合にはサブドメインを管理するゾーンを新規で作成すれば OK ですが、お名前.com はサブドメインを新規のゾーンで管理する機能はありません

ということでサブドメインを Cloud DNS で管理してから GAE にサブドメインを割り当ててみたのでその方法を紹介します

環境

  • Google Cloud DNS (2019/02/21 時点)
  • お名前.com (2019/02/21 時点)

勘違いしそうな点

アクセスしたい URL が https://random.kakakikikeke.com なので「あ、kakakikikeke.com のゾーンに CNAME 突っ込めばいいのね」と思いがちですがそれだとハマります
CNAME だけならそれでも良いかもしれないのですが GAE には SSL 証明書を自動で管理してくれる機能があるためネイキッドドメイン (何もサブドメインが付いていない純正のドメイン、ここで言うところの kakakikikeke.com) に対して A レコードを新規で突っ込まなければなりません

それの何が問題かというと kakakikikek.com はすでにホームページ用の A レコードを持っているため GAE ように更に A レコードを突っ込むと本来のホームページの IP ではない IP が返ってしまいホームページが表示されなくなってしまいます

要するに GAE に割り当てるカスタムドメインを「kakakikikeke.com」のようにすでにネイキッドドメインが A レコードとしてすでに使用されているドメインを使うのではなく 、アクセスしたい URL をサブドメインとする「random.kakakikikeke.com」を割り当てます

で「random.kakakikikeke.com」はまだどこにもゾーンとして管理されていないので今回は Cloud DNS でゾーン管理することにしました
前置き長くなりましたがその手順を紹介します

Cloud DNS に random.kakakikikeke.com のサブドメインを管理するゾーンを登録する

これは簡単です
とりあえずサブドメインを新規ゾーンとして登録するだけです

DNS 名がちゃんとサブドメインになるようにしましょう
ゾーン名は好きな名前で OK です

で新規ゾーンが登録されるとこんな画面になります
まだこのサブドメインのゾーンは使えません
ここに表示されている NS レコードをお名前.com 側の DNS サーバに登録してあげることでサブドメインがちゃんと参照できるようにしてあげます

お名前.com に NS レコードを突っ込む

支持された通り NS レコードをお名前.com 側の DNS に突っ込みます
おなじみのお名前.com NAVI を使って「kakakikikeke.com」の DNS レコードの設定をします

ちゃんと random.kakakikikeke.com の NS レコードとして突っ込みましょう
こうすることで random.kakakikikeke.com にアクセスされたときには Google DNS を参照してくださいねという指示を出すことができます

あとは反映して NS レコードが引けるようなるのを待ちましょう

SOA レコードは Google DNS 側の NS レコードが参照できれば参照できるようになるのでお名前.com 側には追加しません
というか SOA レコードは追加できないので心配せず次に進みます

ウェブマスターセントラルに random.kakakikikeke.com を承認させる

全然関係ないですが、ウェブマスターセントラルだけなぜか別サービスなのが気になります
random.kakakikikeke.com の所有者を確認しましょう
直接上記のリンクからたどっても OK です
GAE のカスタムドメインの設定から「新しいドメインの所有権の確認」からでもいけます

TXT レコードで認証します
下記は Onamae.com での認証方法を選択していますが、この TXT レコードは先程新規で登録した Cloud DNS のゾーンに追加します
(一応 TXT レコードは伏せています、、)

こんな感じで Cloud DNS に TXT レコードを追加すれば OK です

たぶん速攻で TXT レコードが引けるようになるので引けるようになったら確認しましょう
問題なく認証できれば、GAE 側のカスタムドメインの設定に進みます

ここまでしてようやく GAE のカスタムドメインの設定にいけるわけです

GAE のカスタムドメインを設定する

GAE -> 設定 -> カスタムドメインと進みます
先程ウェブマスターセントラルで認証したサブドメイン「random.kakakikikeke.com」が選択できるようになっているので選択します

冒頭述べましたが自分はここで「kakakikikeke.com」のネイキッドドメインをずっと選択してハマっていました、、、
ネイキッドドメインでもいいのですが自分の場合は A レコードが被るのでダメというわけです

「続行」を選択します
モザイクで伏せている部分はプロジェクト ID の部分です

マッピングするドメインを選択します
デフォルトだと www が付いたサブドメインと何も付いていないドメインがマッピングに追加されています
www は正直いらないのですが、まぁそのまま進めました
「マッピングを保存」します

マッピングできれば緑になるので「続行」を選択します

で、ここで問題の DNS レコード情報が表示されます
改めて見るとわかりますが、もしネイキッドドメインを登録すると確かに A レコードが複数になるのでホームページがバグりますね、、、
このレコードたちも当然新規で登録した Cloud DNS のゾーンに登録します

Cloud DNS に GAE のマッピング用のレコードを登録する

先程表示された A, AAAA, CNAMEレコードを登録するだけです

A レコード

AAAA レコード

CNAME レコード
これだけ先頭に www が付きます
たぶんマッピングする URL を選択するところで www 付きのマッピングを削除すればこの CNAME はいらなくなると思います

最終的に Cloud DNS の「random.kakakikikeke.com」のゾーンのレコードは以下のようになります
あとはこれが dig とかで引けるようになれば GAE のアプリにも http://random.kakakikikeke.com でアクセスすることができるようになります

SSL 証明書が自動で設定される

中身は Let's Encrypt ですが Google さんが親切に自動で設定してくれます
少しだけ時間がかかるので待ちましょう

これが OK になれば https でもアクセスできます
ちなみに GAE のカスタムドメインは http, https のどちらでもアクセスできるようです
また既存のドメイン xxxx.appspot.com でもアクセスすることができます

Blogger でも同じようにカスタムドメインを設定したのですが Blogger の場合は既存の URL と http は全部 https にリダイレクトしてくれたのですが、GAE の場合はそのままのようです
もしかすると dispatcher.yaml を使えばリダイレクトすることができるかもしれませんが試していません

最後に

GAE にカスタムドメインをマッピングしてみました
サブドメインを使う場合は新規のゾーン登録が必要なのがポイントです

GAE + お名前.com でカスタムドメインを設定する方法が紹介されていますが、その場合はネイキッドドメインを使っていないことが条件になると思います
今回は Google DNS を使いましたが Route53 でも OK です
Route53 の場合には TXT レコードを使ってサブドメインを委任することができるのでそれを使っても OK だと思います

GAE のカスタムドメインの設定は超簡単みたいな記事が多くありますがすでに使用しているドメインだといろいろ考えることが増え急にレベルが上がるので注意が必要です
というか DNS をある程度自分で管理したことある人じゃないとわからないかもしれません、、、

ちなみに今回の目的である https://random.kakakikikeke.com は Podcast のエピソードをランダムで聴くことができる Web アプリです
「kakakikikeke’s Podcast を聴いてみたいけど、どれを始めに聴いたらいいかわからない」みたいな悩みを持つ方でもこれを使えば気軽に聴けるんじゃないかなと思って作りました
Web 版しかないですが是非使ってみてください

1 件のコメント:

  1. >アクセスしたい URL が https://random.kakakikikeke.com なので「あ、kakakikikeke.com のゾーンに CNAME 突っ込めばいいのね」と思いがちですがそれだとハマります
    CNAME だけならそれでも良いかもしれないのですが GAE には SSL 証明書を自動で管理してくれる機能があるためネイキッドドメイン (何もサブドメインが付いていない純正のドメイン、ここで言うところの kakakikikeke.com) に対して A レコードを新規で突っ込まなければなりません
    それの何が問題かというと kakakikikek.com はすでにホームページ用の A レコードを持っているため GAE ように更に A レコードを突っ込むと本来のホームページの IP ではない IP が返ってしまいホームページが表示されなくなってしまいます

    ここなのですが、GAEで発行されたネイキッドドメインに対するAレコードをお名前.com側に設定せず、サブドメインのCNAME設定だけお名前.comで行えば、ネイキッドドメインは既存のホームページのIPレコードに、サブドメインはGAEのアプリにルーティングされるようになります。
    GAEで発行されたネイキッドドメインに対するAレコードはあくまでgoogle内のマッピングであるため、サブドメインのみGAEにルーティングしたいのであれば、お名前.comにはサブドメインのCNAMEだけ設定すればokです。

    返信削除