アプリケーションをGAE(Google AppEngine)で構築し、独自ドメインでアクセスできるように設定してみました。
GAEは、HTTPS通信に必要なSSL証明書を無料で、かつ面倒な更新作業などもフルマネージドしてくれる機能が提供されており、その設定方法も記載しました。管理の煩わしさから解放され、非常に便利です。
下記のような流れで設定していきます。
1.ゾーン追加(CloudDNS)
2.レジストラ登録(各レジストラ)
3.ドメイン所有権の証明(ウェブマスターセントラル、CloudDNS)
4.カスタムドメインの追加(GAE)
5.カスタムドメインのレコード登録(CloudDNS)
※ ドメインは取得している前提です。
※ 以下、スクショは分かりやすくするために hogehoge と書き換えています。
ゾーン追加
レジストラの登録
ゾーンを追加した後、下記NSレコードのネームサーバーをレジストラ(お名前.comとか)に登録します。
下記NSレコードをコピーして貼り付けるように指示されます。
ns-cloud-a1.googledomains.com.
ns-cloud-a2.googledomains.com.
ns-cloud-a3.googledomains.com.
ns-cloud-a4.googledomains.com.
ドメイン所有権の証明
サイト追加
ウェブマスターセントラルを利用して、ドメインを所有していることを証明します。 https://www.google.com/webmasters/verification/home?hl=ja&authuser=0
ドメインを選択、「別の方法タグ -> ドメイン名プロバイダ -> その他※」を指定します。ドメインの所有者であることを証明するため、指定された値のDNSレコード(TXT)を設定するように指示されます。この値をメモしておき、画面は閉じずにCloudDNSの画面に移動します。
※ CloudDNSではなく、レジストラのDNSを使う場合は、その他ではなく、例えばonamae.comなどを選択して指示通りに登録します。
TXTレコードのCloudDNS登録
ウェブマスターセントラルに表示されていた値を、Cloud DNSで作成したゾーンのTXTレコードに追加します。
ウェブマスターセントラルに戻り、「確認」ボタンを押します。TXTレコードが反映されて確認がとれれば、証明されたこととなり、下記画面になります。
※ 反映が未だの場合、「プロパティを確認できませんでした」となるので、しばらく時間をおいて「確認」を実行します。
「確認が完了しました。」と表示されれば、正常終了です。ウェブマスターセントラル上のサイトにも確認結果の履歴(成功/失敗)が表示されます。
GAEのカスタムドメイン追加
GAEの各サービスに、カスタムドメインをマッピングさせます。今回はGAEのサービスdefaultにカスタムドメイン(www.hogehoge.com)を設定します。
AppEngineの設定より、「カスタムドメイン -> カスタムドメインの追加」を選択します。
保存が完了すると、CloudDNSにレコードを登録するように指示されます。レコードの内容をメモしておき、完了を選択します。
下記のように、GAEのカスタムドメインにwww.hogehoge.comが追加されました。
CloudDNSのレコード登録
ドメインマッピングの保存後にメモしておいたレコード(A、AAAA、CNAME)を登録します。
「レコードセット追加」より、各レコードを追加します。
これで http://www.hogehoge.com はGAEの default サービスにマッピングされ、ドメイン名でアクセスできるようになります。
このとき、SSL証明書はGoogleが無料で発行してくれるので、https通信も可能になります。(GAEの設定で、SSLセキュリティ「Googleが自動管理、更新」と表示されていれば、OKです。)SSL証明書はLet's Encryptを使っているようです。また、通常は3か月で更新しなければいけませんが、これもGoogleが自動で更新作業を行ってくれます。面倒な初期設定も煩雑な管理もなく、これはかなり便利です。(マネージドセキュリティを無効にすれば、発行したSSL証明書を利用することもできます。)
ワイルドカードマッピング(*.hogehoge.com)を使って設定すると、サブドメイン名と一致するGAEのサービスがマッピングされます。(例えば、http://console.hogehoge.com はGAEのconsoleサービスにマッピングされることになります。)
ただし、ワイルドカードマッピングはSSL証明書の自動更新機能が利用できません。Let's Encryptが2017年12月にワイルドカード対応するようですので、GAEでの対応はもう少し先になりそうです。現時点では、別途SSL証明書を発行し、アップロードすることでHTTPS通信ができます。
参考
参考ドキュメント
ルーティングについて
https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed
カスタムドメインとSSLについて
https://cloud.google.com/appengine/docs/standard/python/console/using-custom-domains-and-ssl