从存储账户Zip部署Azure Functions远程构建失败求助
Azure Function 部署时无法找到requirements.txt中声明的依赖模块(Linux Python 3.9 + WEBSITE_RUN_FROM_PACKAGE)
问题背景
通过Terraform+CI/CD流水线部署Azure Function基础设施,函数代码存于独立Git仓库。配置自动部署流程:CI/CD将代码打包为Zip上传至存储账户,同时通过Terraform设置函数应用配置:
"WEBSITE_RUN_FROM_PACKAGE" = "https://${var.storage_account_name}.blob.core.windows.net/${var.storage_account_container_name}/cpms-function-app.zip${var.sas_token}", "FUNCTIONS_WORKER_RUNTIME" = "python", "AzureWebJobsDisableHomepage" = "true", "SCM_DO_BUILD_DURING_DEPLOYMENT" = "true" "ENABLE_ORYX_BUILD" = "true"
环境为Linux上的Python 3.9运行时,部署时报错找不到requirements.txt中已声明的模块。文件已成功上传至存储账户,但构建过程存在问题。已尝试切换部署方式、运行时/函数版本、不同区域部署,因本地是ARM64机器无法进行本地测试。
可能的原因及解决方法
1. 检查Zip包目录结构
- 确保
requirements.txt和函数代码文件处于Zip包根目录,避免嵌套在子文件夹内。- 错误结构:
cpms-function-app.zip/src/requirements.txt - 正确结构:
cpms-function-app.zip/requirements.txt
- 错误结构:
- 打包时直接压缩代码文件,而非包含代码的父文件夹。
2. 验证requirements.txt格式与依赖兼容性
- 检查依赖名称、版本号是否有拼写错误,版本约束是否符合PyPI规范。
- 对于需编译的依赖(如numpy、pandas),确认声明的版本兼容Python 3.9和Linux x86_64环境(Azure Function Linux运行时为x86_64架构,本地ARM64环境的依赖无法复用)。
3. 修正Terraform配置格式与补充版本声明
- 原配置中最后一行缺少逗号,可能导致
ENABLE_ORYX_BUILD未生效,修正后配置:"WEBSITE_RUN_FROM_PACKAGE" = "https://${var.storage_account_name}.blob.core.windows.net/${var.storage_account_container_name}/cpms-function-app.zip${var.sas_token}", "FUNCTIONS_WORKER_RUNTIME" = "python", "AzureWebJobsDisableHomepage" = "true", "SCM_DO_BUILD_DURING_DEPLOYMENT" = "true", "ENABLE_ORYX_BUILD" = "true", "PYTHON_VERSION" = "3.9" - 添加
PYTHON_VERSION明确指定运行时版本,避免Oryx自动检测出错。
4. 查看构建日志定位具体错误
- 进入Azure Portal的Function App,导航至部署中心 > 日志,查看Oryx构建过程的详细日志,确认是依赖下载失败、编译错误还是其他问题。
- 通过Kudu控制台(
https://<your-function-app-name>.scm.azurewebsites.net)检查/home/site/wwwroot目录下的文件,确认requirements.txt是否存在,以及.python_packages目录是否生成依赖包。
5. 配置依赖下载源解决网络问题
- 若因网络原因导致依赖无法下载,可在Function App中添加
PIP_INDEX_URL配置指定镜像源:"PIP_INDEX_URL" = "https://pypi.tuna.tsinghua.edu.cn/simple"
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

