SREの岩立です。
最近FocusriteのScarlett 4i4を買いました。
4i4から内部ルーティングが触れるので、手持ちのスマホの音もscarlettに入力してPCの音声とスマホの音声を同時に聞けるようになったのでソシャゲが捗っています。
一つのイヤホンで複数デバイスの音が聞けるのは最高なのでおすすめです。
さて本題ですが、CloudDNSのZone移設を行う際にシャード不足でうまく行かないことがあったので、備忘録として記事に残しておこうと思い今回の記事を書いています。
CloudDNSのNameserverのシャード不足で新しくZoneが作成できない
プロジェクトの構成を見直す際に、とあるGCPプロジェクト内で管理しているCloudDNSのZoneを、別のGCPプロジェクトに移行する必要が出てきました。
そこで別プロジェクトに移行先のZoneを作ろうとしたところ以下のエラーで怒られました。
すでに登録済みでもなく、ポリシーにより禁止はすでに他のZoneで使用できているので大丈夫で、となるとシャードが残っていない可能性がありそうなので、シャードについて調査することにしました。
ドキュメントを読めとあるので、該当部分を読んだところ、ざっくりCloudDNSには以下の制限があるとのことでした。
https://cloud.google.com/dns/quotas?hl=ja#name-server-limits
- 使えるシャードの数は5つ
- ns-cloud-a1.googledomains.com. (aの部分がa, b, c, d ,eになって5シャード)
- 重複するZoneは5つまで
- 重複するZoneを作るときは強制的にシャードを1つ消費
重複するゾーンというのは、以下のドキュメントに書いてありますが、ドメイン名が同一であるか、example.com
と hoge.example.com
のようにサブドメインの関係にあると該当します。
https://cloud.google.com/dns/docs/overview?hl=ja#overlapping
今回の場合は、以下の図のように5つほどサブドメインを切っていて、シャードを全て各Zoneで使っているため、空いているシャードがない状態でした。
そのため、シャードAから見たら同一ドメイン名を持つZoneのため作成不可、シャードABCDEから見たら ~~~~.example.com
が作成しようとしているexample.com
のサブドメインに当たるため作成不可という状況になっていました。
以下の図のようにシャードに空きがあれば、重複したドメイン名のZoneを作成することが出来ます。
実際にはどう対応したか
ちょうど実験用に切っていたサブドメインがあったので、そのZoneを削除してシャードを開放しました。そして親ドメインのZoneを別プロジェクトに作成し、レジストラで指定しているNSを新しいZoneのものに切り替えて移行し、その後に削除したサブドメインのZoneを復活させました。
他になにか手段があるか
公式ドキュメントでは、移行する際にシャードが足りない場合はZoneをCloudDNS以外のDNSサービスに移動して一時的に退避し、親ドメインのZoneの移設が終わってからCloudDNSに戻すといったことをが公式のドキュメントには書かれていました。
ただし、サブドメインのZoneを重複して作成できる状況であれば、重複して作成し、サブドメインのZoneを移行することで、特定のシャードからZoneを退避させることが出来ます。そうして最終的に親ドメインのZoneを作れるようにシャードを1つ解放すれば、外部のDNSサービスを使うこと無く、ダウンタイムを0にして移行できるかもしれません。
このときには、サブドメインから移設していくのではなく、一旦シャードを1箇所開放して親ドメインのZoneの作成を行ってからサブドメインを移設していくことが大事になります。
サブドメインの移設先Zoneを先に作成してしまうと、結局親ドメインの移設先Zoneを作成する際にまたシャード開放をする必要が出てきてしまいます。
この方法は軽く挙動を確かめて行けそうと思っただけで、実際には未検証なのでできるかはわかりませんので参考程度にしてもらえると良いかと思います。
おわりに
今回はCloudDNSでZoneを移設する際にシャード不足で困ったらどうするかという記事でした。
備忘録的な記事だったので、あまり刺さるひとは居ないかもしれませんが、いつか誰かの役に立てればなと思います。