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

ARM模板部署Azure Function App时内部函数无法创建的问题

问题分析与解决方案

你的ARM模板中误用了apiDefinition属性,这个字段是用于配置API管理与Function App的关联,无法用来加载函数代码,这也是函数未创建的核心原因。以下是针对你的场景(Linux Python3.9 Function App,代码存储在Blob存储)的有效解决方案:

方案一:使用WEBSITE_RUN_FROM_PACKAGE加载Blob中的代码包

  1. 将你的函数代码(每个函数放在单独子文件夹,包含__init__.py和function.json)打包成zip文件
  2. 上传zip包到Azure Blob存储容器,生成带有读取权限的SAS URL
  3. 在ARM模板的appSettings中添加以下配置:
    {
      "name": "WEBSITE_RUN_FROM_PACKAGE",
      "value": "https://<你的存储账户名>.blob.core.windows.net/<容器名>/函数代码包.zip?<SAS令牌>"
    }
    
    这个配置会让Function App直接从Blob存储的zip包加载运行代码,无需额外复制文件。

方案二:将代码上传到Function App关联的文件共享

你已经配置了WEBSITE_CONTENTAZUREFILECONNECTIONSTRING和WEBSITE_CONTENTSHARE,Function App的代码默认存储在这个文件共享的site/wwwroot目录下:

  1. 找到对应存储账户的文件共享(名称为你配置的WEBSITE_CONTENTSHARE值,即小写的Function App名称)
  2. 将函数代码按结构上传到site/wwwroot目录:每个函数对应一个子文件夹,例如wwwroot/test-trigger-function/__init__.py和wwwroot/test-trigger-function/function.json
  3. 若要自动化这个过程,可以在ARM模板中添加部署脚本资源,执行文件上传操作,示例Azure CLI命令:
    az storage file upload-batch --destination "site/wwwroot" --source ./本地函数代码目录 --account-name <存储账户名> --account-key <存储账户密钥>
    

方案三:启用自动构建部署

保留你已设置的SCM_DO_BUILD_DURING_DEPLOYMENT: true,同时将代码上传到支持的部署源(如GitHub、Azure存储Blob),并在appSettings中配置部署源的相关参数,Function App会自动拉取代码并构建运行。

修正后的ARM模板关键部分示例(以方案一为例)

"appSettings": [
  // 原有配置...
  {
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~4"
  },
  {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "[parameters('functionWorkerRuntime')]"
  },
  {
    "name": "SCM_DO_BUILD_DURING_DEPLOYMENT",
    "value": "true"
  },
  // 添加WEBSITE_RUN_FROM_PACKAGE配置
  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "https://<你的存储账户>.blob.core.windows.net/<容器>/function-code.zip?<SAS令牌>"
  }
]

内容的提问来源于stack exchange,提问作者Ravi kant Gautam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:44:58