如何用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}")}" } }
关键说明
- 直接引用ScmUri:
azurerm_linux_web_app.web.scm_site_credential.0.scm_uri是Web App资源自动导出的属性,包含完整的SCM站点地址(格式如https://xxx.scm.azurewebsites.net),拼接/docker/hook即可得到触发部署的完整端点。 - 备用拼接方案:如果遇到
scm_site_credential属性未正常返回的场景,可以通过Web App的默认域名拼接SCM地址:service_uri = "https://${replace(azurerm_linux_web_app.web.default_hostname, ".azurewebsites.net", ".scm.azurewebsites.net")}/docker/hook" - 认证配置:可选添加
Authorization头部,使用Web App的SCM凭据进行身份验证,避免未授权的请求触发部署。
部署完成后,当你的ACR有新镜像推送时,Webhook会自动触发Web App重启并拉取最新镜像,完全实现自动化部署流程。
内容的提问来源于stack exchange,提问作者Simon Kocurek
相关产品推荐
相关产品推荐

