アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

GoogleDomainsも終わるので、まずはDNSだけCloudflareに移してTerraformで管理する

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に移していきたいですね。