GCP の DNS を利用する場合、Web UI や コマンドでレコードをポチポチ投入するの大変ですよね。
今回は Cloud DNS のレコードをまるごと yaml で管理し、 export/import する方法を書いてみます。
必要なもの
試す際に Google Cloud SDK(gcloud) のインストールは必須です。
必要ではないですが、以下の手順はすでに Cloud DNS に zone が作成され、ある程度のレコードが有る想定で書いています。
DNS に登録した内容を yaml ファイルに一括出力する
コマンドは以下のような感じになります
gcloud dns record-sets export dns-record.yaml --zone=ZONE -z {ZONE_NAME}
上記の dns-record.yaml
は出力先ファイル名です。
出力したいディレクトリやファイル名を適当に渡すことで実行ディレクトリ以外の場所にもファイルを出力できます。
今回はフォーマットを特に指定していませんが、 Bind のゾーンファイル形式などでの出力も可能なようです。(未確認)
出力した yaml ファイルは後述する Import 機能で利用でき、また、git などで差分管理が行えるので、チームで変更内容のレビューをして適用する、などのフローに利用することもできるかもしれません。
出力した yaml ファイルを Import し、DNSに反映させる
出力したファイルを以下のようなコマンドで適用できます。
gcloud dns record-sets import dns-record.yaml --zone=ZONE -z {ZONE_NAME} --delete-all-existing
ポイントは --delete-all-existing
フラグなんですが、これは投入前にすでに存在するレコードをすべて消すというオプションだと思われます。このフラグを付与しない場合、すでに存在する各種レコードに対して重複したレコードはエラーになるため、yaml まるごとの適用という運用ができなくなります。
このあたり深く振る舞いを調べていないため、各自運用の際に検証してみてもらえると良いと思います。(コメントもください)
おわりに
普通は Terraform などを利用して DNS のレコード管理などを行うのが主流かと思いますが、
GCP の標準機能でもある程度それっぽいことができますよ。
という感じのお話でした。
ではでは。