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

Azure Functions迁移至Container Apps后自定义域名配置及证书绑定问题

托管在Container Apps上的Azure Functions自定义域名配置指南

前置:解决添加域名时的Deny Assignment错误

Failed to add hostname myCustomDomainName.The client 'myusername@myWorkDomainName' with object id 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' has permission to perform action 'Microsoft.App/containerApps/write' on scope '/subscriptions/yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy/resourceGroups/myResourceGroupName_FunctionApps_zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz/providers/Microsoft.App/containerApps/myFunctionAppName'; however, the access is denied because of the deny assignment with name 'zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz' and Id 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' at scope '/subscriptions/yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy/resourceGroups/myResourceGroupName_FunctionApps_zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz'.

自动生成的myResourceGroupName_FunctionApps_xxx资源组是Azure Functions托管Container Apps的系统托管资源组,默认带有Deny Assignment限制直接修改其中的Container Apps资源。操作自定义域名需通过Function App门户视图的配置入口,或使用ARM模板/CLI绕过门户限制。


1. 为托管在Container App上的Function App配置自定义域名

操作步骤:

  • 域名所有权验证
    在DNS服务商处添加TXT记录:
    • 记录类型:TXT
    • 主机名:asuid.<你的自定义域名>
    • 值:通过CLI命令az functionapp show --name <func-name> --resource-group <your-rg> --query "customVerificationId"获取的验证令牌
  • 添加自定义域名
    • 进入Azure Functions门户视图,选择「设置」->「自定义域名」,点击「添加自定义域名」,输入域名完成验证后添加
    • 若门户操作受限,使用Azure CLI命令:
      az functionapp config hostname add --name <func-app-name> --resource-group <your-main-rg> --hostname <your-custom-domain>
      
  • 配置DNS解析
    在DNS服务商处添加对应记录:
    • CNAME记录:主机名指向<func-app-name>.azurewebsites.net
    • A记录:主机名指向Function App的IP地址(通过az functionapp show --name <func-name> --resource-group <rg> --query "defaultHostName"解析获取)

2. 通过ARM模板完成自定义域名配置

以下是整合到Function App部署模板的核心片段:

{
  "type": "Microsoft.Web/sites",
  "apiVersion": "2023-12-01",
  "name": "[parameters('functionAppName')]",
  "location": "[parameters('location')]",
  "properties": {
    "hostNames": [
      "[parameters('customDomain')]",
      "[concat(parameters('functionAppName'), '.azurewebsites.net')]"
    ],
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
    "siteConfig": {
      "appSettings": [
        // 此处保留你的应用配置项
      ]
    }
  },
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
  ]
}

注意事项:

  • 即使Function App托管在Container Apps上,仍需以Microsoft.Web/sites资源类型定义
  • 部署前必须完成域名所有权验证

3. 从CAE导入证书并绑定至域名(含ARM模板)

手动配置步骤:

  • 获取CAE中的证书
    进入Container Apps Environment门户视图,在「证书」选项卡中确认已导入的TLS证书并记录其指纹
  • 绑定证书到域名
    • 进入Function App门户视图的「自定义域名」页面,找到已添加的域名,点击「添加绑定」,选择目标证书并设置SSL类型为SNI SSL
    • 若门户操作受限,使用CLI命令:
      az functionapp config ssl bind --name <func-app-name> --resource-group <your-rg> --certificate-thumbprint <cert-thumbprint> --ssl-type SNI --hostname <your-custom-domain>
      

ARM模板实现证书绑定

在Function App的ARM模板中添加hostNameSslStates配置:

{
  "type": "Microsoft.Web/sites",
  "apiVersion": "2023-12-01",
  "name": "[parameters('functionAppName')]",
  "location": "[parameters('location')]",
  "properties": {
    "hostNames": [
      "[parameters('customDomain')]",
      "[concat(parameters('functionAppName'), '.azurewebsites.net')]"
    ],
    "hostNameSslStates": [
      {
        "name": "[parameters('customDomain')]",
        "sslState": "SniEnabled",
        "thumbprint": "[parameters('certificateThumbprint')]",
        "toUpdate": true
      }
    ],
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
  },
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
  ]
}

注意事项:

  • 确保证书与Function App处于同一资源组,或部署身份有权限访问CAE所在资源组的证书
  • 替换certificateThumbprint为目标证书的指纹值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:33:20