如何通过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
相关产品推荐
相关产品推荐

