All Articles

ドメイン移管、ついでに静的サイトホスティングサービス変更

はじめに

Google Domainsが提供終了になり事業売却されることになりました。

昔某国産ドメイン管理サービスでドメインを取ったところ、当時使っていたメールアドレスを莫大な広告メールで塗りつぶされた挙句に怒りが湧いてくるレベルのUXでドメイン管理をさせられ (「無事にドメインを取得できた」以外に) 擁護すべき点がない最悪の経験をさせられたことがあり、このブログのドメイン管理を行うにあたっては事前にネットで各種サービス下馬評を調査してGoogle Domainsを選定したという経緯がありました。

下馬評通りGoogle DomainsのUXは非常に良好で好きだったのですが、事業売却となれば致し方ありません。これを機に以前から気になっていたCloudflareにドメイン移管することにしました。

移管までのメモ

Cloudflareについて調査

Cloudflareですが、恥ずかしながらここに至るまでは「尖ったサービスとCDNの会社」ぐらいの認識であまり詳細は知りませんでした。以前からAWSのS3互換ストレージを外向き通信料0円で提供したり、エッジ分散のSQLiteベースのDBを提供したりと技術的に尖ったサービスの話題は度々目にしていて記憶にも残っていたのですが、「へーすごい」で止まっていたので今回改めてサービスの全体像をざっと見てみました。

DDoS対策やPoPで高速な応答を可能にするCDNサービスは言うに及ばず、機能豊富なDNSサービス、静的サイトホスティングサービス、ストレージサービス、エッジで動作する関数実行基盤、同じくエッジで動作するデータベース、画像や動画などの重量が比較的あるコンテンツのストリーミングなど、概観してみるとおおよそモダンなWebサービスを提供するにあたって欲しくなる機能が網羅されているような印象を受けました。汎用的なクラウドサービスと思うなら正直全然足りないわけですけど、Webサービスの提供という観点なら凄まじい充実度というか、「ああ、〇〇するときにあると便利だな」とかすぐ用途が思いつく尖ったサービスが並んでる感じです。いやすごいなこれ……。

Cloudflare ZeroTrust Accessによる簡単な認証付加とか、Webアプリ開発してると色んな局面ですごく欲しくなります。ちなみにAzureにはApp ServiceにAuthentication / Authorization(旧称:Easy Auth)という機能があって同じようなことができるので是非よろしくお願いします。(ダイレクトマーケティング)

肝心かなめのDNSについては以下のように要件を整理していたのですが、機能十分どころか下手するとGoogle Domainsを上回るのではないか?というくらいに充実した機能を備えていました。

  • きちんとレコード操作できること (あたりまえ)
  • メール爆撃してこないこと (あたりまえ)
  • ドメイン更新料がやたら高くないこと
  • 変動IPを追跡するDynamic DNSを実現できること
    • レコード操作が可能なAPIを備えていればヨシとする
  • 多要素認証を備えること

1点問題があり、.dev ドメインが2023/07/29現在ドメイン移管非対応となっています。元々blog.shuit.devのドメインを与えていたこのブログには影響大ですが、.devのTLDについては 将来対応するらしい ことと、まだGoogle Domains側のサ終までに余裕がある上にカスタムネームサーバーの設定を行えばGoogle Domainsにドメインは置いたままにはなりますがレコード管理は全てCloudflare側に移動できるらしいことを踏まえてOKとしました。移管したいドメインはshuit.devだけではありませんし、shuit.devだけのためにCloudflareを選択肢外とするには至りませんでした。

ドメイン移管の操作

基本的には以下公式ブログの指示通りに行いました。

  • Cloudflareアカウント準備
    • 二段階認証セット (よくあるOTPだけでなくセキュリティキー認証にも対応していました、偉い)
    • 決済手段追加
    • Zone登録 (移管したいドメインをZoneとして登録する)
  • Zone→DNSと辿ると表示される指示通りに、Google Domains側でCloudflareのカスタムネームサーバーをセットし有効化
    • このとき元のレコードがスキャンされて登録されるが、Cloudflareが提供する「Proxy」をオフにしないと問題が出るケースがあるので注意
    • カスタムネームサーバーを有効化してからCloudflare側で有効化を確認するまでにはやや時間(10分前後)がかかる
  • Google Domainsでドメインのロックを解除&ドメイン移管のための認証コードを取得
  • CloudflareからDomain Registration→Transfer Domainsと進んでドメイン移管操作を実行
    • ロック解除をCloudflareが認識するまでにやや時間がかかる
    • Google Domainsから移管承認のためのメールが来るので承認する(承認しなくてもそのうち移管されるが、日数がかかる)

.dev ドメインについては2までで、3以後は今後Cloudflareの.devサポートを待っての実行になります。

APIトークンについて

My Profile->API Tokensと辿ると、Cloudflareに対してAPIを使って操作するためのトークン発行画面が表れます。Let’s EncryptのDNS-1チャレンジの自動化とDynamic DNSの実現においてはこのトークンを使うことになります。

仕様として、APIトークンごとに

  • Cloudflareにおいて可能な操作の設定
    • 操作サービスの限定
    • 操作対象のZoneやユーザー、アカウントの限定
  • APIに対するアクセス元IPアドレスの限定
  • 有効期限の設定 (終了だけでなく開始も)

が可能でした。

キー1つ流出すると外部から操作し放題になってしまう、ということはよほどなさそうです。(めんどくさがって最小権限を振らずガバっと管理者権限与えるような真似をしたら別ですが)

詳細は割愛しますが、これを利用して愛用のopnsenseルーターでLet’s Encrypt周りの諸々をセットアップし、ついにルーターのWeb UIログイン時に証明書エラーが出ない状態に至りました。以後自宅内でサーバーを立ててもきちんと証明書エラー出さずにHTTPSで通信させることができそうです。自宅内でもついにゼロトラスト時代の幕開けです。

Cloudflare Pages

折角ドメインをCloudflareに持ってきたんだから、Cloudflareが提供する静的サイトホスティングサービスを使ってみたら色々幸せになれるんじゃないかと考えました。これまで使っていたAzure Static Web Appsには特に不満はありませんでしたが、折角フットワークの軽い静的サイトの形式でブログを作っているのだから、色々試すのも経験と思ってCloudflare Pagesに移すことにしました。本業的には部分的にはライバルになるわけで、敵を知り己を知れば百戦危うからず的な意味合いもあります。競合と比較になったときとか、他社のサービス事情を知ってる知らないで取り得る対策の幅が大きく違いますし。

価格

そうなると気になるのは値段ですが、調べてみるとよくある帯域の無料枠がありませんでした。これは有料という意味ではなく、どれだけ帯域を食っても無料という意味です。「いやマジか……じゃあどこで稼ぐんだこれ……」となってたんですが、どうも月間のビルド数が課金ポイントになる様子です。

Cloudflare PagesはどうもAzure Static Web Appsと同じくCI/CDありきの構成になっていて(≒SDKやCLIなどでビルド産物をアップロードすることができない)、リポジトリがCloudflare側にcloneされた後ビルドプロセスが走ってデプロイされるという流れで本番環境に投入されます。このビルドの本数と同時ビルド数に上限があり、有料プランにするとここが上がる仕組みのようです。

月当たり500回のビルドまでは無料です。個人運用のブログには十分過ぎる数です。課金が必要になるユーザーはそこそこ大規模にWebサービスを運用している主体に限られるでしょう。小規模なベンチャーのサービスや個人サービス、検証段階にあるサービスなら無料でも十分そうです。

設定

拍子抜けするくらい簡単に終わったので概要だけ。

デプロイはPagesからConnect to GitでGithubのリポジトリに接続し、npm install && npm run build のビルドコマンドを指定したら終わりました。この点は色々と親切にラップし過ぎて足りないパッケージや設定を補うときにちょっと面倒なことになったAzure Static Web Appsよりも良い体験でした。楽にするためのラップは便利ですが、カスタマイズや問題発生時のデバッグを考えると「塩梅」があります。

その他やったことをメモしておきます。

  • pages.devドメインのページに展開されるので、このドメインに対してカスタムドメインを設定する
  • Bulk Redirects 設定を利用してpages.devドメインのアドレスに対するアクセスをカスタムドメインにリダイレクトして直接アクセスを防ぐ
  • Pagesのブログプロジェクト->Settings->Access policyからPR作成時にデプロイされるプレビューページへのアクセスポリシーを設定 (メールOTPを設定)

パフォーマンス

image

めっちゃ速い。

おわりに

Google DomainsからCloudflareにドメインを移管し、ついでにブログをAzure Static Web AppsからCloudflare Pagesに移しました。今のところ快適です。

.devドメイン対応がGoogle Domainのサ終に間に合わなかった場合はドメインを放棄しようと思っていて、その前準備として新たにshuntaito.netというドメインを取得し、shuit.devからリダイレクトするように設定しています。もしブックマークやリンクを張る場合などはこちらでお願いします。

Published 2023/07/29

ShuntaIto による技術ブログ