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

如何通过Terraform无停机将Front Door Classic升级至标准版/高级版?

无停机升级Terraform维护的Front Door Classic到标准版/高级版方案

核心结论

Front Door Classic与标准版/高级版是Azure中完全独立的资源类型,无法通过Terraform直接"升级"现有资源,只能通过并行部署新资源+DNS流量切换的方式实现无停机迁移,同时避免门户升级后Terraform代码失效的问题。


针对你的疑问逐一解答

  1. 官方未提供Terraform操作方式?
    是的,微软官方主要聚焦门户升级流程,但Terraform的标准做法是通过部署全新的azurerm_frontdoor_v2资源(对应标准版/高级版),再通过DNS切换完成迁移,这是目前最可靠的无停机方案。

  2. 新建Front Door并行运行后切换是否可行?
    完全可行。你可以同时运行两个Front Door实例:

    • 先部署新的标准版/高级版Front Door,完成自定义域名的所有权验证(通过添加TXT记录,不影响原解析)
    • 然后通过DNS服务商逐步调整解析权重(比如先10%流量到新实例,观察稳定后逐步提升至100%),实现无停机切换
    • 同一个自定义域名并非只能绑定一个Front Door,只要完成验证,切换解析即可指向新实例
  3. 是否需要门户升级再导入Terraform?
    强烈不推荐。导入Terraform需要手动匹配大量资源属性(比如路由规则、后端池、WAF配置等),极易出现状态不一致问题;而且门户升级后,原azurerm_frontdoor资源代码完全无法适配新的v2资源,反而会增加工作量。

  4. 门户升级后原Terraform代码会失效?
    你的结论完全正确。Front Door Classic使用azurerm_frontdoor资源类型,而标准版/高级版使用azurerm_frontdoor_v2,两者的资源ID、属性结构、配置逻辑完全不同,原代码无法管理升级后的资源,必须重新编写v2对应的配置。


具体Terraform操作步骤

1. 迁移配置到v2资源块

复制原Classic的核心配置(前端主机、后端池、路由规则、健康检查等),转换为azurerm_frontdoor_v2的语法:

# 原Classic资源(后续将删除)
resource "azurerm_frontdoor" "classic" {
  # 原配置...
}

# 新的标准版/高级版Front Door
resource "azurerm_frontdoor_v2" "standard_premium" {
  name                = "my-frontdoor-v2"
  resource_group_name = azurerm_resource_group.example.name
  sku_name            = "Premium_AzureFrontDoor" # 或 "Standard_AzureFrontDoor"

  frontend_endpoint {
    name                     = "my-frontend-endpoint"
    host_name                = "custom-domain.example.com"
    custom_host_name_enabled = true
    custom_https_provisioning_enabled = true
    custom_https_configuration {
      certificate_source = "AzureKeyVault" # 或 "FrontDoor"
      # 对应配置...
    }
  }

  backend_pool {
    name = "my-backend-pool"
    backend {
      address = "backend.example.com"
      http_port = 80
      https_port = 443
      priority = 1
      weight = 100
    }
    health_probe {
      path = "/health"
      protocol = "Https"
      interval_in_seconds = 30
    }
  }

  routing_rule {
    name               = "my-routing-rule"
    frontend_endpoints = [azurerm_frontdoor_v2.standard_premium.frontend_endpoint[0].name]
    accepted_protocols = ["Http", "Https"]
    patterns_to_match  = ["/*"]
    route_type         = "Forward"
    backend_pool_name  = azurerm_frontdoor_v2.standard_premium.backend_pool[0].name
  }
}

# 输出新Front Door的VIP,用于DNS切换
output "frontdoor_v2_vip" {
  value = azurerm_frontdoor_v2.standard_premium.frontend_endpoint[0].host_name
}

2. 部署新Front Door

运行terraform init和terraform apply,部署新的标准版/高级版实例,此时新旧两个Front Door同时运行,新实例的自定义域名已完成验证(等待TXT记录生效)。

3. 无停机DNS切换

通过DNS服务商调整自定义域名的解析记录:

  • 先将部分流量(如10%)指向新Front Door的VIP
  • 监控业务流量和错误率,确认稳定后逐步提升权重至100%
  • 完全切换后,验证新实例的所有功能正常

4. 清理旧资源

确认流量完全切换后,删除Terraform代码中的azurerm_frontdoor资源块,运行terraform apply销毁旧的Classic实例,完成迁移。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:43:12