You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform脚本中调用gcloud命令迁移Azure DNS记录到GCP Cloud DNS

实现方案

Terraform可通过null_resource搭配local-exec预置器执行本地gcloud命令,完成Azure NS记录到GCP Cloud DNS的同步,具体实现如下:

前提条件

  • 执行Terraform的环境已安装gcloud、Azure CLI
  • 已完成gcloud账号认证,且账号具备GCP Cloud DNS编辑权限
  • 已完成Azure CLI认证,且账号具备Azure DNS区域读取权限

完整代码示例

# 原有Azure DNS资源定义
resource "azurerm_resource_group" "dns_management" {
  name     = "dns-managment"
  location = "West US"
}

resource "azurerm_dns_zone" "mydomaincom" {
  name                = "mdomain.com"
  resource_group_name = azurerm_resource_group.dns_management.name
}

resource "azurerm_dns_a_record" "projectmydomain" {
  name                = "project"
  zone_name           = azurerm_dns_zone.mydomaincom.name
  resource_group_name = azurerm_resource_group.dns_management.name
  ttl                 = 300
  records             = ["127.0.0.1"]
}

# 同步Azure NS记录到GCP Cloud DNS
resource "null_resource" "sync_ns_to_gcp" {
  # Azure NS记录变更时自动触发同步
  triggers = {
    azure_ns_list = join(",", azurerm_dns_zone.mydomaincom.name_servers)
  }

  provisioner "local-exec" {
    command = <<EOT
# 若GCP无对应托管区则先创建
gcloud dns managed-zones create mydomaincom \
  --dns-name=mdomain.com. \
  --description="Synced from Azure DNS" \
  --project=替换为你的GCP项目ID || echo "托管区已存在,跳过创建"

# 构造NS记录配置文件
cat > azure_ns.yaml << EOF
kind: dns#resourceRecordSet
name: mdomain.com.
rrdatas:
${join("\n", formatlist("- %s", azurerm_dns_zone.mydomaincom.name_servers))}
ttl: 300
type: NS
EOF

# 导入NS记录到GCP Cloud DNS
gcloud dns record-sets import azure_ns.yaml \
  --zone=mydomaincom \
  --project=替换为你的GCP项目ID
rm -f azure_ns.yaml
EOT
  }
}

注意事项

  • 代码中的替换为你的GCP项目ID需要修改为你实际使用的GCP项目ID
  • 不需要覆盖GCP侧已有NS记录的场景,可在import命令中去掉--delete-all-existing参数
  • 如果需要同步所有DNS记录而非仅NS记录,可在命令中增加az network dns record-set list导出Azure全量记录,再批量导入GCP即可

内容的提问来源于stack exchange,提问作者Hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:03