如何更改 CloudFlare 帐户中的多个站点 dns?

How to change multiple sites dns in CloudFlare account?

我在 CloudFlare 帐户上有很多站点,有时在迁移服务器时,我需要手动更改 CF 中的每个域 DNS。我如何使用一些工具或脚本来帮助我下载所有域信息,而不是轻松更改它? 也许是一些 Terraform 的例子?我还没有使用 Terraform,所以只是想着如何使这个过程自动化。 谢谢。

是的,您可以使用 Terraform for this. There are an official Cloudflare Provider, the documentation for which you can find here

“直接”使用提供程序时,您的 Terraform 配置将如下所示:

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = ">= 3.12.1"
    }
  }
}

variable "cloudflare_api_token" {
  type      = string
  sensitive = true
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

resource "cloudflare_zone" "acme_com" {
  zone = "acme.com"
}

您可能对以下 Cloudflare 资源感兴趣,以便在您的配置中使用它们:

此外,您可以使用此 module。那么您的配置可能如下所示:

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = ">= 3.12.1"
    }
  }
}

variable "cloudflare_api_token" {
  type      = string
  sensitive = true
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

module "acme_com" {
  source = "registry.terraform.io/alex-feel/zone/cloudflare"
  version = "1.7.0"
  zone = "acme.com"
}

examples 可以帮助您开始使用该模块。

这里是一个具体的 ready-to-use 示例,您可以在使用模块时根据具体情况使用:

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = ">= 3.12.1"
    }
  }
}

variable "cloudflare_api_token" {
  type      = string
  sensitive = true
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

locals {
  # All your zones go here
  zones = ["acme.com", "example.com"]
  # Your IP for A records for all the zones goes here
  ip = "192.0.2.1"
}

module "all_domains" {
  source  = "registry.terraform.io/alex-feel/zone/cloudflare"
  version = "1.7.0"

  for_each = toset(local.zones)

  zone = each.value

  records = [
    {
      record_name = "a_main"
      type        = "A"
      value       = local.ip
    }
  ]
}

在这种情况下,您只需在 zones 变量中列出所有域并在 ip 变量中指定所需的 IP。因此,将为您的每个域创建具有指定 IP 的 A 记录。

要获取所有区域,您可以使用 Cloudflare API List Zones 方法。所以您的请求将如下所示:

curl --request GET \
  --url https://api.cloudflare.com/client/v4/zones \
  --header 'Authorization: Bearer YOUR_TOKEN'