寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

GCP の DNS を yaml ファイルを利用して管理する

f:id:chidakiyo:20201210184827j:plain

GCPDNS を利用する場合、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 の標準機能でもある程度それっぽいことができますよ。
という感じのお話でした。

ではでは。