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

WSL环境下Linux消费计划Python Azure Functions Zip部署失败求助

部署Python Azure Functions到Linux消费计划失败:无HTTP触发器/只读模式问题解决

我在WSL的Linux环境中使用Python 3.10开发了Hello World示例Azure Functions,目标部署到Linux消费计划(已排除存储账户部署方案)。尝试通过az functionapp deployment source config-zip和func azure functionapp publish命令部署均失败,出现以下两种报错:

  • No HTTP triggers found
  • Your app is currently in read only mode...
    部署后函数在Azure门户及VS Code中均不可见。相关代码与配置如下:

原始代码与配置

Hello World示例代码

import azure.functions as func
import logging

app = func.FunctionApp(auth_level=func.AuthLevel.ANONYMOUS)

@app.function_name(name="HttpTrigger1")
@app.route(route="hello")
def test_function(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
    else:
        name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
            "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
            status_code=200
    )

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "SCM_DO_BUILD_DURING_DEPLOYMENT": true,
    "AzureWebJobsStorage": "redacted",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
    "WEBSITE_CONTENTSHARE": "redacted",
    "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "redacted",
    
  }
}

requirements.txt

azure-functions

排查与修复步骤

1. 修正代码逻辑错误

代码中存在分支逻辑问题:当name初始为空时,解析请求体后未赋值给name,且else分支位置错误,导致请求体中的参数无法被读取。修正后的代码:

import azure.functions as func
import logging

app = func.FunctionApp(auth_level=func.AuthLevel.ANONYMOUS)

@app.function_name(name="HttpTrigger1")
@app.route(route="hello")
def test_function(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
            name = req_body.get('name')
        except ValueError:
            pass

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
            "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
            status_code=200
    )

2. 修复配置文件语法与冗余项

local.settings.json末尾存在多余逗号,会导致JSON解析失败;同时Linux消费计划下WEBSITE_CONTENTSHARE等配置由平台自动生成,无需手动指定。修正后的配置:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "SCM_DO_BUILD_DURING_DEPLOYMENT": true,
    "AzureWebJobsStorage": "redacted",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
  }
}

3. 解决"只读模式"报错

Linux消费计划默认使用只读文件系统,需开启远程构建避免权限问题:

  • 使用func命令部署时,添加远程构建参数:
    func azure functionapp publish <你的函数应用名称> --build remote
    
  • 使用az cli zip部署时,先打包项目(排除本地配置和冗余文件)再上传:
    zip -r function.zip . -x .git/* __pycache__/* local.settings.json
    az functionapp deployment source config-zip --resource-group <你的资源组名称> --name <你的函数应用名称> --src function.zip
    

4. 验证触发器索引配置

确保AzureWebJobsFeatureFlags设置为EnableWorkerIndexing(Python v2模型必须配置,用于自动发现触发器)。可在Azure门户的「函数应用→配置→应用设置」中检查该值是否同步生效。

5. 查看部署日志定位问题

若以上步骤无效,通过以下方式查看详细日志:

  • 门户端:函数应用→部署中心→日志
  • 命令行:添加--verbose参数执行部署命令:
    func azure functionapp publish <你的函数应用名称> --build remote --verbose
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:50