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

如何通过Azure CLI在单个Azure Function App中部署多Python函数

在单个Azure Function App中部署多个Python函数(HTTP+Blob触发)的配置步骤

你当前的问题源于两个独立的Function项目目录,每个目录都包含完整的Function App配置,发布时会覆盖Azure上的整个Function App内容,而非新增函数。解决方法是将两个函数合并到同一个Function项目下,共享核心配置文件,具体步骤如下:

步骤1:重构目录结构

选择其中一个现有项目作为基础(比如az-func-http),重命名为合并后的主项目目录(例如az-func-combined),然后将另一个函数的核心代码迁移过来。最终目录结构如下:

├── azure-functions
│   ├── az-func-combined  # 合并后的主项目
│   │   ├── .python_packages
│   │   ├── .vscode
│   │   ├── .gitignore
│   │   ├── function_app.py  # 包含两个函数的代码
│   │   ├── host.json
│   │   ├── local_settings.json  # 合并后的配置
│   │   ├── requirements.txt  # 合并后的依赖
│   ├── az-func-blob(备份后可删除)
│   ├── az-func-http(备份后可删除)
│   ├── README.md

步骤2:合并函数代码

打开az-func-blob中的function_app.py,将Blob触发函数的代码复制到合并后项目的function_app.py中,与原有的HTTP触发函数共存。示例合并后的代码:

import azure.functions as func
import logging

app = func.FunctionApp()

# HTTP触发函数(原az-func-http代码)
@app.route(route="HTTPTrigger", auth_level=func.AuthLevel.ANONYMOUS)
def HTTPTrigger(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
        )

# Blob触发函数(原az-func-blob代码)
@app.blob_trigger(arg_name="myblob", path="samples-workitems/{name}", connection="AzureWebJobsStorage")
def BlobTrigger(myblob: func.InputStream):
    logging.info(f"Python Blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

步骤3:合并配置文件

  1. host.json:保留基础项目的host.json即可(V2模型的配置结构一致,无需修改)。
  2. local_settings.json:
    • 将az-func-blob中Values节点下的配置项(如Blob触发依赖的AzureWebJobsStorage连接字符串)复制到合并后项目的对应位置,确保所有必要配置齐全。
    • 示例合并后的Values片段:
      "Values": {
          "AzureWebJobsStorage": "你的存储账户连接字符串",
          "FUNCTIONS_WORKER_RUNTIME": "python",
          "FUNCTIONS_EXTENSION_VERSION": "~4"
      }
      
  3. requirements.txt:合并两个项目的依赖包,去重后保留所有必要项(比如两个项目默认都依赖azure-functions,只保留一行即可)。

步骤4:本地验证合并结果

进入合并后的项目目录,执行本地运行命令:

func start

分别测试两个函数:

  • HTTP函数:访问http://localhost:7071/api/HTTPTrigger,传入name参数验证响应。
  • Blob函数:向配置的存储容器samples-workitems上传文件,查看本地控制台的日志输出是否正常。

步骤5:发布到Azure Function App

在合并后的项目目录下,执行发布命令:

func azure functionapp publish SPIEFUNC2

此次发布会将两个函数同时部署到目标Function App中,不会再出现覆盖已有函数的问题。

额外注意事项

  • 若之前已发布过单个函数,合并后的发布操作会自动替换Azure上的现有内容,包含两个函数。
  • 确保Azure Function App的运行时设置为Python,版本与本地项目一致。
  • 生产环境的存储账户连接字符串,建议在Azure Portal的Function App配置页面中设置,而非依赖本地配置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:42:49