如何使用Terraform为已有Azure Front Door添加自定义域名
Azure Front Door现有实例批量绑定自定义域名Terraform实现方案
完全可以通过Terraform为已存在的Azure Front Door实例绑定自定义域名,不需要重新创建实例,具体操作步骤如下:
前置依赖
- 已配置符合版本要求的
azurermTerraform Provider - 待绑定的自定义域名已完成域名注册,拥有DNS解析管理权限
- 若使用自定义SSL证书,需提前将证书上传至Azure Key Vault并完成Front Door服务主体的权限授权
关联现有Front Door实例
根据你是否需要用Terraform管理原有Front Door实例的全量配置,可选两种关联方式:
方式1:只读引用现有实例(仅新增域名,不修改原有AFD配置)
直接通过data数据源读取已有AFD的属性,不需要导入状态,不会改动原有实例的其他配置:
data "azurerm_frontdoor" "existing_afd" { name = "替换为你的现有Front Door实例名" resource_group_name = "替换为现有实例所在的资源组名" }
方式2:导入实例到Terraform状态(后续可通过Terraform全量管理AFD配置)
先在tf文件中写出与现有AFD属性一致的资源骨架,再执行导入命令将实例纳入Terraform状态管理:
terraform import azurerm_frontdoor.existing_afd /subscriptions/你的订阅ID/resourceGroups/资源组名/providers/Microsoft.Network/frontDoors/AFD实例名
批量配置自定义域名
以下示例支持批量绑定多个域名,默认使用Front Door托管SSL证书:
# 定义待绑定的自定义域名列表 variable "custom_domains" { type = list(string) default = ["www.example.com", "app.example.com"] # 替换为你的实际域名 } # 批量创建AFD自定义域名资源 resource "azurerm_frontdoor_custom_domain" "batch_domains" { for_each = toset(var.custom_domains) name = replace(each.value, ".", "-") # 转换域名格式符合Azure资源命名规则 frontdoor_id = data.azurerm_frontdoor.existing_afd.id # 若使用导入的实例则改为azurerm_frontdoor.existing_afd.id host_name = each.value cname_validate_enabled = true # 需提前将域名CNAME解析到你的AFD默认接入域名 # 配置HTTPS证书 frontend_endpoint { name = data.azurerm_frontdoor.existing_afd.frontend_endpoints[0].name # 替换为你的AFD前端端点名称 custom_https_provisioning_enabled = true custom_https_configuration { certificate_source = "FrontDoor" minimum_tls_version = "1.2" } } }
执行部署
配置完成后执行以下命令即可完成域名绑定:
terraform plan terraform apply
提示:如果使用自定义证书,只需将certificate_source修改为AzureKeyVault并补充Key Vault、证书版本等对应参数即可。
内容的提问来源于stack exchange,提问作者Tokyo chou
相关产品推荐
相关产品推荐

