我正在开发以下 Python v2 Azure 函数:
这个想法是能够调用在shared_code/helper.py中定义的简单辅助函数; helper.py 具有以下结构:
import logging
import requests
from datetime import datetime
def debug_print():
return "whatever"
def here_using_requests():
response = api_call()
return response
当我通过GitHub部署上面的代码时,部署成功,但我在Function App中看不到任何功能。
from shared_code.helper import debug_print
,功能就会再次显示在门户中,并且它可以工作(blob 活页夹工作正常)。任何人都可以向我解释我做错了什么以及如何正确设置项目?这是azure函数的其他文件:
# host.json
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
#requirements.txt
azure-functions
requests
谢谢!
我已经尝试将 helper.py 从文件夹中取出或使用不同的导入语句,但问题仍然存在。
假设
from shared_code.helper import debug_print
在某种程度上干扰了function_app.py的入口点,我做了以下尝试:我将导入语句移到了主定义下:
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="BlobOutput1")
@app.route(route="file")
@app.blob_input(arg_name="inputblob",
path="product-data/xxx.csv",
connection="AzureWebJobsStorage")
@app.blob_output(arg_name="outputblob",
path="product-data/test.csv",
connection="AzureWebJobsStorage")
def main(req: func.HttpRequest, inputblob: str, outputblob: func.Out[str]):
from shared_code.helper import debug_print
logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
outputblob.set(inputblob)
string = debug_print()
return string
在这种情况下,部署成功,我可以在Function App中看到该函数,但是当触发时,我收到500内部错误“没有名为requests的模块”(在部署期间requests已正确安装在环境中)。
编辑: init.py 为空。
我刚刚编写了 api_call(),但你可以假设它是这样的:
def api_call():
url = "https://api.xxx.com/auth/o2/token"
payload = {
"grant_type": "refresh_token"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, data=payload, headers=headers)
response.raise_for_status()
return response.json().get("access_token")
我具有与您相同的文件夹结构和代码,并使用下面给出的 YAML 代码使用 GitHub 操作将函数部署到函数应用程序。
name: Deploy Python project to Azure Function App
on:
push:
branches: ["main"]
env:
AZURE_FUNCTIONAPP_NAME: 'afreeen-fa'
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'
PYTHON_VERSION: '3.11'
jobs:
build-and-deploy:
runs-on: ubuntu-latest
environment: production
steps:
- name: 'Checkout GitHub Action'
uses: actions/checkout@v4
- name: Setup Python ${{ env.PYTHON_VERSION }} Environment
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: 'Resolve Project Dependencies Using Pip'
shell: bash
run: |
pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
python -m pip install --upgrade pip
pip install -r requirements.txt --target=".python_packages/lib/site-packages"
popd
- name: 'Run Azure Functions Action'
uses: Azure/functions-action@v1
id: fa
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}
scm-do-build-during-deployment: true
enable-oryx-build: true
这成功地将我的函数部署到函数应用程序。
您还可以使用
func azure functionapp publish {functionAppName}
命令或 VS Code 中的函数扩展来部署该函数。