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

如何通过Terraform为Azure Web App添加自定义域名

使用Terraform为Azure Web App绑定自定义域名

核心配置步骤

先确认你已准备好以下资源:

  • 已部署的Azure Web App(通过azurerm_web_app创建)
  • 已注册的自定义域名
  • 域名DNS服务商的管理权限(用于配置验证记录)

1. 普通子域名绑定(CNAME记录,如www.example.com)

直接通过azurerm_web_app_hostname_binding资源完成绑定,示例配置:

# 基础资源定义(若已存在可跳过)
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

resource "azurerm_app_service_plan" "example" {
  name                = "example-appserviceplan"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  sku_name            = "B1"
}

resource "azurerm_web_app" "example" {
  name                = "example-webapp-123" # 名称需全局唯一
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  app_service_plan_id = azurerm_app_service_plan.example.id
}

# 绑定自定义子域名
resource "azurerm_web_app_hostname_binding" "subdomain" {
  web_app_name           = azurerm_web_app.example.name
  resource_group_name    = azurerm_resource_group.example.name
  hostname               = "www.example.com" # 你的自定义子域名
}

配置前需在DNS服务商处添加CNAME记录:将www.example.com指向Web App的默认域名(格式为{webapp-name}.azurewebsites.net)

2. 根域名绑定(A记录,如example.com)

根域名绑定需额外配置验证用的TXT记录,步骤如下:

# 读取Web App的验证ID
data "azurerm_web_app" "example" {
  name                = azurerm_web_app.example.name
  resource_group_name = azurerm_resource_group.example.name
}

# 绑定根域名
resource "azurerm_web_app_hostname_binding" "root_domain" {
  web_app_name                     = azurerm_web_app.example.name
  resource_group_name              = azurerm_resource_group.example.name
  hostname                         = "example.com"
  custom_host_name_dns_record_type = "A"
  custom_domain_verification_id    = data.azurerm_web_app.example.custom_domain_verification_id
}

必须先在DNS服务商处配置两条记录:

  • A记录:example.com指向Web App的默认IP(可在Azure Portal的Web App「自定义域名」页面查看)
  • TXT记录:asuid.example.com值为上述custom_domain_verification_id的内容,等待DNS生效后再执行terraform apply

3. 绑定SSL证书(启用HTTPS,可选)

若需开启HTTPS,先导入SSL证书到Azure,再完成绑定:

# 从Key Vault导入SSL证书(前提是证书已存入Key Vault)
resource "azurerm_app_service_certificate" "example" {
  name                = "example-cert"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  key_vault_id        = azurerm_key_vault.example.id
  key_vault_secret_id = azurerm_key_vault_secret.example.id
}

# 绑定域名并启用SSL
resource "azurerm_web_app_hostname_binding" "ssl_binding" {
  web_app_name           = azurerm_web_app.example.name
  resource_group_name    = azurerm_resource_group.example.name
  hostname               = "www.example.com"
  ssl_state              = "SniEnabled" # 启用SNI型SSL
  thumbprint             = azurerm_app_service_certificate.example.thumbprint
}

常见问题排查

  • 验证失败:用nslookup或dig工具检查DNS记录是否生效,根域名必须确保asuid开头的TXT记录配置正确
  • 权限不足:确认Terraform使用的服务主体拥有Microsoft.Web/sites/hostNameBindings/write权限
  • 域名冲突:自定义域名不能同时绑定到多个Web App,检查是否已有其他绑定关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:46:03