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

Azure Bicep创建证书报“Endpoint not found”错误求助

自定义域名绑定Azure App Service时证书部署失败问题分析

问题场景

  • 目标:为微服务配置自定义域名 portal.dev.mydomain.com(mydomain.com 为占位符)
  • 已完成:手动添加TXT/CNAME DNS记录并验证成功
  • 期望:通过Azure Bicep实现与门户操作一致的流程(添加域名→配置DNS→验证→绑定证书)

部署代码

Bicep配置(证书+主机绑定)

var portalEndpoint = 'portal.${domain}'

resource portalCertificate 'Microsoft.Web/certificates@2022-09-01' = {
  name: '${portalEndpoint}-certificate'
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    domainValidationMethod: 'http-token'
  }
}

resource portalHostBinding 'Microsoft.Web/sites/hostNameBindings@2022-09-01' = {
  parent: portalWebApp
  name: portalEndpoint
  properties: {
    siteName: portalWebAppName
    hostNameType: 'Verified'
    sslState: 'SniEnabled'
    thumbprint: portalCertificate.properties.thumbprint
  }
}

部署命令

az deployment group create `
    --resource-group [my-resource-group] `
    --template-file /path/to/bicep/file

错误信息

部署后证书资源返回NotFound错误,精简后内容如下:

{
    "status": "Failed",
    "error": {
        "code": "DeploymentFailed",
        "target": "/subscriptions/REDACTED/resourceGroups/REDACTED/providers/Microsoft.Resources/deployments/REDACTED.Resources",
        "message": "At least one resource deployment operation failed. Please list deployment operations for details.",
        "details": [
            {
                "code": "NotFound",
                "target": "/subscriptions/REDACTED/resourceGroups/REDACTED/providers/Microsoft.Web/certificates/portal.dev.REDACTED.com-certificate",
                "message": "{\r\n  \"Code\": \"NotFound\",\r\n  \"Message\": \"Endpoint not found. Please see the service help page for constructing valid requests to the service.\"\r\n      }\r\n    }\r\n  ],\r\n  \"Innererror\": null\r\n}"
            }
        ]
    }
}

错误原因分析及前置要求

核心原因

  1. 证书创建依赖域名验证完成:使用http-token验证方式时,Azure需要先确认域名已绑定到App Service并完成验证,才能创建对应证书。当前Bicep并行创建证书和主机绑定,未等待域名验证完成,导致证书创建请求找不到有效域名上下文,返回NotFound。
  2. 资源顺序依赖缺失:主机绑定的hostNameType: 'Verified'要求域名已完成验证,但部署未明确依赖顺序,证书创建可能早于域名验证完成。

前置要求及修复方案

  1. 分步完成域名绑定与验证:
    • 先创建无SSL配置的基础主机绑定,等待域名验证完成后再创建证书。
    • 在Bicep中通过dependsOn显式声明资源依赖,确保证书创建在主机绑定验证完成之后。
  2. 调整证书创建逻辑:
    • 若使用http-token验证,需确保App Service可通过HTTP访问到验证文件,先完成域名基础绑定(无SSL)再触发证书创建。
    • 可切换为dns-token验证方式,配合已配置的TXT记录,规避HTTP验证的依赖问题。
  3. 资源层级与权限检查:
    • 确认App Service Plan的SKU为Basic及以上层级(Free/Shared SKU不支持自定义SSL)。
    • 证书名称需符合Azure资源命名规范,避免特殊字符或过长名称。

修复后的Bicep示例

var portalEndpoint = 'portal.${domain}'

// 第一步:创建基础主机绑定,完成域名验证
resource portalHostBindingBase 'Microsoft.Web/sites/hostNameBindings@2022-09-01' = {
  parent: portalWebApp
  name: portalEndpoint
  properties: {
    siteName: portalWebAppName
    hostNameType: 'Verified'
    sslState: 'Disabled'
  }
}

// 第二步:依赖基础绑定完成后创建证书
resource portalCertificate 'Microsoft.Web/certificates@2022-09-01' = {
  name: '${portalEndpoint}-certificate'
  location: location
  dependsOn: [portalHostBindingBase]
  properties: {
    serverFarmId: appServicePlan.id
    domainValidationMethod: 'http-token'
    hostNames: [portalEndpoint] // 显式指定要验证的域名
  }
}

// 第三步:绑定SSL证书
resource portalHostBindingSSL 'Microsoft.Web/sites/hostNameBindings@2022-09-01' = {
  parent: portalWebApp
  name: portalEndpoint
  dependsOn: [portalCertificate]
  properties: {
    siteName: portalWebAppName
    hostNameType: 'Verified'
    sslState: 'SniEnabled'
    thumbprint: portalCertificate.properties.thumbprint
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:46:22