GoogleDomainsのサービス終了がアナウンスされています。移行は来年行う予定ですが、とりあえずDNSだけ移す事にしました。また、これを機にTerraformでコード管理しようと思ったのでその設定までを紹介します。
DNS設定のImportはCloudFlareが行ってくれるので、GoogleDomainsではカスタムネームサーバーの設定にCloudFlareの指定したIPを入れます。
Terraformの設定
Terraformは一から作成するのは初めてなので、試行錯誤しながら作成しました。
modules/constants/constants.tf
constantsモジュールにzone_idを設定します。
output "zone_id" { value = "" }
vars.tfvars
https://dash.cloudflare.com/profile/api-tokens で ゾーン DNS を編集する
のテンプレートで作成したものを設定します。
cloudflare_api_token=
services/dns/
サービスごとに分けたかったのでこのようなディレクトリ構成にしました。
vars.tf
引数を定義します。
variable "cloudflare_api_token" { type = string }
main.tf
providerの定義、moduleのimportを行います。
terraform { required_providers { cloudflare = { source = "cloudflare/cloudflare" version = "4.19.0" } } } provider "cloudflare" { api_token = var.cloudflare_api_token } module "constants" { source = "../../modules/constants" }
既存の設定を取得する
Cloudflareにある既存の設定をimportします。
https://developers.cloudflare.com/terraform/advanced-topics/import-cloudflare-resources
cf-terraforming
コマンドを入れます。
brew tap cloudflare/cloudflare brew install cloudflare/cloudflare/cf-terraforming
terraformファイルを作成します。
cf-terraforming generate -t $CLOUDFLARE_API_TOKEN -z $CLOUDFLARE_ZONE_ID --resource-type cloudflare_record > dns_records.tf
これだけでterraform applyすると既に作成されていると言われるので、既存の情報をimportします。terraform import
コマンドが生成されるので、必要な引数を設定したら実行します。
cf-terraforming import --resource-type "cloudflare_record" -t $CLOUDFLARE_API_TOKEN --zone $CLOUDFLARE_ZONE_ID > import.sh
ここまで実行すれば変更や追加、削除が問題なく使用できます。
おわりに
gitで履歴も残せるし、設定も一覧で見やすいし、今後色々なものをTerraformに移していきたいですね。