DNSのレコードをGitHubで管理 & 自動反映する
最近調布技研という団体のDNSのネームサーバーをCloudflareに変えてみた。 Cloudflareは無料でAPIつきのネームサーバーとCDNが使えてとても便利そうだったので。
APIつきのネームサーバーが使えるようになったので、レコード管理 & 反映の自動化をやってみた。
DNSレコードをGitHubで管理する
管理するために作ったのがこちら。
TerraformにCloudflareのproviderがあったので、これを使ってレコード設定を記述するようにした。
Provider: Cloudflare - Terraform by HashiCorp
Cloudflareの設定 (cloudflare.tf)
variable "cloudflare_email" { description = "cloudflare email" } variable "cloudflare_apikey" { description = "cloudflare api key" } provider "cloudflare" { email = "${var.cloudflare_email}" token = "${var.cloudflare_apikey}" }
上記がTerraformのCloudflare providerを使うために必要な設定で、CloudflareのAPIキーをここに書いても動くけど、publicなリポジトリなので実行時に環境変数で渡すことにした。
レコードの設定 (record.tf)
resource "cloudflare_record" "chofu_tech_A" { domain = "chofu.tech" name = "chofu.tech" value = "151.101.100.133" type = "A" } resource "cloudflare_record" "www_chofu_tech_A" { domain = "chofu.tech" name = "www.chofu.tech" value = "151.101.100.133" type = "A" }
こんな感じでレコードを列挙していく。ただのテキストファイルなのでこれでプルリクベースで管理できるようになった。
DNSレコードの設定変更が自動反映されるようにする
プルリクのマージ後に自動で実行するためのツールとしてCircleCIを使った。
CircleCIは実行時に渡す環境変数が設定できて、その環境変数は外部から読めないようにできるのでAPIキーを隠しておきたい場合に便利。
TF_VAR_cloudflare_email = "hoge@example.com" TF_VAR_cloudflare_apikey = "hogehoge"
環境変数はこの2つを設定しておいた。 TF_VAR_
で始まる環境変数はTerraform内のパラメータとして使える。
あとは、CircleCIの設定ファイルに master
ブランチに変更があった場合は terraform plan
のみ実行(反映はされない)、 production
ブランチに変更があった場合は terraform apply
を実行(実際に反映される) されるようにして反映が自動で行われるようにした。
chofutech-public-dns-record/circle.yml at master · chofutech/chofutech-public-dns-record · GitHub
これでしばらく運用してみて便利そうだったら自分のドメインもこんな感じで管理してみようかなと思う。