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

如何用Terraform Azurerm Provider获取Web App的scmUri配置部署Webhook

使用Terraform Azurerm Provider自动获取Web App的ScmUri配置ACR Webhook

你可以直接通过azurerm_linux_web_app资源导出的内置属性获取ScmUri,无需手动复制或调用外部API,实现全自动化部署。

解决方案代码

修改你的ACR Webhook资源配置,直接引用Web App的导出属性:

resource "azurerm_linux_web_app" "web" {
  app_settings = {
    DOCKER_REGISTRY_SERVER_URL      = url
    DOCKER_REGISTRY_SERVER_USERNAME = data.azurerm_key_vault_secret.acr-service-principal-id.value
    DOCKER_REGISTRY_SERVER_PASSWORD = data.azurerm_key_vault_secret.acr-service-principal-password.value
    # 其他应用设置
  }
  # 其他Web App配置参数
}

resource "azurerm_container_registry_webhook" "webhook" {
  name                = "web-app-deploy-hook"
  resource_group_name = azurerm_linux_web_app.web.resource_group_name
  registry_name       = azurerm_container_registry.acr.name # 替换为你的ACR资源名称

  service_uri = "${azurerm_linux_web_app.web.scm_site_credential.0.scm_uri}/docker/hook"
  actions     = ["push"] # 设置触发Webhook的事件,这里选择镜像推送事件
  status      = "enabled"

  # 可选:添加认证头部,确保Webhook请求被Web App验证
  headers = {
    Authorization = "Basic ${base64encode("${azurerm_linux_web_app.web.scm_site_credential.0.username}:${azurerm_linux_web_app.web.scm_site_credential.0.password}")}"
  }
}

关键说明

  1. 直接引用ScmUri:azurerm_linux_web_app.web.scm_site_credential.0.scm_uri是Web App资源自动导出的属性,包含完整的SCM站点地址(格式如https://xxx.scm.azurewebsites.net),拼接/docker/hook即可得到触发部署的完整端点。
  2. 备用拼接方案:如果遇到scm_site_credential属性未正常返回的场景,可以通过Web App的默认域名拼接SCM地址:
    service_uri = "https://${replace(azurerm_linux_web_app.web.default_hostname, ".azurewebsites.net", ".scm.azurewebsites.net")}/docker/hook"
    
  3. 认证配置:可选添加Authorization头部,使用Web App的SCM凭据进行身份验证,避免未授权的请求触发部署。

部署完成后,当你的ACR有新镜像推送时,Webhook会自动触发Web App重启并拉取最新镜像,完全实现自动化部署流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:55:23