noteのドメイン移行を支えた技術
こんにちは、ピースオブケイクのコンです。先週、noteのドメインがnote.muからnote.comに移転されました
移転の詳しい背景はこちらの記事を参照いただくとして、本稿では技術的側面からこのドメイン移行について振り返ってみます
2000万MAUのサイトを移転する技術
webサービスがドメインを移転する事はたまにある...といえばあるでしょうが、noteのようにそれなりに複雑で、2000万MAUもあるサイトをドメイン移転するというのは聞いたことがありません。
2019年2月にcomを取得後、具体的に移行の作戦を考え始めたのですが、ググって成功事例を探しても「理屈は分かるけど、ウチの規模だと、どこにどう影響出るか完璧に把握するのは難しいな...」と思いました。それでもやるしかない状況だったわけです。
なので、今後、ドメイン移転を実施するサービスのスタッフ(特にエンジニア)さんの参考になればと思い筆をとりました。検討の材料にしていただければこれ幸いです。
要件整理
ドメイン移転でコアとなる作業は、サービスを新ドメインでホストできる状態にした上で、旧から新ドメインへリダイレクトをかけることです。今回は、note.muへのアクセスを301でnote.comにリダイレクトさせればいいわけです。
しかし、note.muドメインからの配信をすべて止めるわけにはいきません。RSSや埋め込み、ネイティブアプリはnote.muをしばらくの間は参照するので、特定のエンドポイントは引き続きnote.muでもアクセスできるようにする必要があります。
加えて、移転実行前にcomでnoteの諸機能が正常動作するかを確認・検証しておく必要があります。今回は特定のデバッグ用UserAgentをセットしてアクセスした場合、note.comで閲覧できるように細工しておく方針を考えていました。
まとめると、要件としては
・note.muへのアクセスはnote.comへ 301リダイレクトさせる
・ただし、URLやUserAgentによっては、 muとcomの双方からアクセスできる
・デバッグ用UserAgentをセットしてアクセスした場合 note.comでnoteへアクセスできる
あたりが考慮ポイントでした。
ルーティングの方針検討
実現にあたり、nginxのようなリバプロを立てて自前でゴニョる手もありましたが、サーバー管理は避けたかったので FastlyやCloudflareといったSaaSでなんとかできんかと調査していました。
そんな中、2019年3月、AWSのマネージドL7ロードバランサーであるALBの神アプデが発表され、ホストやパス、リクエストヘッダ、IPなどの諸条件の組み合わせ(AND/OR)で柔軟にルーティング設定が出来るようになりました。noteはALBをすでに使っているので設定追加だけでパスやUserAgentでのフォワード制御、リダイレクト、静的テキスト配信も簡単にいけるやん!となり、一気に作業が削減できたのでした。
ALBの設定の例
準備は続くよどこまでも
ルーティングレイヤはすぐに目処がついたので、次にアプリケーション側の改修です。
ホスト名(note.mu) の文字列がコードのいたる所にベタ書きされていたので、これを設定値に追い出しました。また、サーバーやLB、CDNなどインフラリソースをcomのために新規に用意したくなかったので、note.muとnote.comのどちらのホスト名でリクエストが来ても既存インフラで動作するように調整しました。調査・検証範囲が広く、工程としてはここが一番泥臭くて大変な所でした。
加えて、ドメインのホワイトリストを事前に登録する必要がある外部サービスにnote.comを追加します。TwitterやFacebookログインのコールバック、reCAPTCHA、Google Analyticsなどが該当しますね。作業としては追加するだけですが、お漏らし=即トラブルなので気が抜けないところです。
いざメンテへ
移転実行にはメンテを入れることにしました。メンテなしでも移転はできますが、トラブった際にすぐにサービスを止めて対応できるようにしたかったのと、テーブルメンテや各種パッチ当てなど諸々もついでにやっておきたかったからです。
メンテ画面は例によってALBの静的配信機能で配信したのですが、デザイナーのkawaidaさんが引っ越しメンテ画面をこしらえてくれました。マブい。
事前に動作確認は終わっていることも有り、メンテ自体は滞りなく終了。ALBでmuのリクエストをcomにリダイレクトするように設定し、いよいよcomの世界線へ。メンテ時には深津さんが大量のRAIZINを持って(僕は2本キメました)応援しにきてくれまして、最後まで見届けてくれました。
移転後のあれこれ
正直に申しますと、チョンボなしで移転を終わらせる自信はあまりありませんでした。noteの複雑度と規模が相当にデカイので、なにか想定外な深刻な事態が発生するのではとビクビクしていました。
結果としては、一部のnoteで表示不具合があったり、リンク不具合など数件のトラブルはあったものの致命的なものは無く、予想よりはかなりすんなりいったのかなという印象です。とはいえ、中長期でみないと真の影響は測りにくい側面もあるので、今後シェアできる知見が得られたらまたnoteにまとめようと思います。
まとめ
・noteのcomへのドメイン移行を終える事ができました
・事前準備と調査がすべて。デバッグ用フラグなどで移転実行前に挙動確認を終えておくとよさそう
・ルーティングの制御は自前でやってもいいけどマネージドのリバプロ(ALB)はやっぱり楽
One more thing
ピースオブケイクはサーバーサイドエンジニアを募集しています。今回のドメイン移転のような基盤刷新系のプロジェクトにもチャレンジできます。お待ちしております!