我正在尝试在我的 Azure 订阅中部署一个简单的时间触发函数。 __init__.py
基本上是模板的代码。但是,仅在导入(甚至不使用)一个模块/库时部署该功能时,我遇到了问题。导致问题的行是:
从 azure.search.documents 导入 SearchClient
因此,正确部署和触发的代码:
import os
import sys
from io import StringIO
import csv
import time
import json
import openai
import logging
import requests
from dateutil import parser
from dotenv import load_dotenv
from azure.storage.blob import BlobServiceClient,ContainerClient,BlobClient
from tenacity import retry, wait_random_exponential, stop_after_attempt
from azure.core.credentials import AzureKeyCredential
from azure.keyvault.secrets import SecretClient
from azure.identity import ClientSecretCredential
from azure.identity import DefaultAzureCredential
#from azure.search.documents import SearchClient
import datetime
import azure.functions as func
from . import util_codes_custom as ucc
def main(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
logging.info('Python timer trigger function ran at %s', utc_timestamp)
logging.info(ucc.print_message("keyvault?"))
部署后, azure 监视器显示所有蓝线,例如:
2023-08-11T17:33:00Z [Verbose] Sending invocation id: 'fa46dc97-ab44-4732-xxxx-65d165d76a17
2023-08-11T17:33:00Z [Verbose] Posting invocation id:fa46dc97-ab44-4732-xxxx-65d165d76a17 on workerId:dc4b5bc9-d9c4-403d-a51f-5b72c86eaf2a
2023-08-11T17:33:00Z [Information] Python timer trigger function ran at 2023-08-11T17:33:00.004288+00:00
2023-08-11T17:33:00Z [Information] keyvault?
2023-08-11T17:33:00Z [Information] Executed 'Functions.azurefunction-minutas-timetrigger' (Succeeded, Id=fa46dc97-ab44-4732-b0aa-65d165d76a17, Duration=19ms)
2023-08-11T17:33:20Z [Information] Executing 'Functions.azurefunction-minutas-timetrigger' (Reason='Timer fired at 2023-08-11T17:33:20.0002929+00:00', Id=3c23fc7a-a0d3-4e42-9b0f-b4c103ba3bba)
当我取消注释 azure.search.documents
导入行时,函数失败并在监视器中给出以下日志消息(部署时):
2023-08-11T18:15:20Z [Verbose] Sending invocation id: '096b7468-e0ba-4641-8562-d85779b551f3
2023-08-11T18:15:20Z [Verbose] Posting invocation id:096b7468-e0ba-4641-XXXX-d85779b551f3 on workerId:b4c17b5d-53c6-4455-bfa8-d01f322a28b0
2023-08-11T18:15:20Z [Error] Executed 'Functions.azurefunction-minutas-timetrigger' (Failed, Id=096b7468-e0ba-4641-8562-d85779b551f3, Duration=20ms)
我的 pip 列表(.venv 上安装的内容)是:
Package Version
--------------------------- ------------------
aiohttp 3.8.5
aiosignal 1.3.1
async-timeout 4.0.3
attrs 23.1.0
azure-ai-formrecognizer 3.2.1
azure-common 1.1.28
azure-core 1.27.1
azure-functions 1.15.0
azure-identity 1.13.0
azure-keyvault 4.2.0
azure-keyvault-certificates 4.7.0
azure-keyvault-keys 4.8.0
azure-keyvault-secrets 4.7.0
azure-search-documents 11.4.0a20230509004
azure-storage-blob 12.16.0
certifi 2023.7.22
cffi 1.15.1
charset-normalizer 3.2.0
colorama 0.4.6
cryptography 41.0.3
frozenlist 1.4.0
idna 3.4
isodate 0.6.1
msal 1.23.0
msal-extensions 1.0.0
msrest 0.7.1
multidict 6.0.4
numpy 1.25.1
oauthlib 3.2.2
openai 0.27.8
pip 23.2.1
portalocker 2.7.0
pycparser 2.21
PyJWT 2.8.0
python-dateutil 2.8.2
python-dotenv 1.0.0
pywin32 306
requests 2.31.0
requests-oauthlib 1.3.1
setuptools 65.5.0
six 1.16.0
tenacity 8.2.2
tqdm 4.66.1
typing_extensions 4.7.1
urllib3 2.0.4
yarl 1.9.2
请注意,azure.search.documents
的版本不是标准版本。它安装在requirement.txt中,如下所示:
-i https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/
azure-search-documents==11.4.0a20230509004
可能出了什么问题?我读到了一些关于“dockerizing”该功能的内容。这是唯一的解决方案吗?
提前致谢!
最佳答案
我将from azure.search.documents import SearchClient更改为azure-search-documents==11.4.0b8,我可以导入它并运行一个简单的代码。
代码:
import datetime
import logging
import azure.functions as func
from azure.search.documents import SearchClient
from azure.core.credentials import AzureKeyCredential
def main(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
search_service_name = '<search_name>'
index_name = '<index_name>'
admin_key = '<search_key>'
endpoint = f"https://<>search_name.search.windows.net/"
credential = AzureKeyCredential(admin_key)
search_client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
results = search_client.search(search_text="<search_query>")
for result in results:
logging.info(f"Search result: {result}")
logging.info('Python timer trigger function ran at %s', utc_timestamp)
requiremets.txt:
azure-core==1.27.1
azure-functions==1.15.0
azure-identity==1.13.0
azure-search-documents==11.4.0b8
输出:
Azure 函数计时器触发器成功运行,如下所示,
然后,我将其部署到函数应用程序并成功部署,如下所示,
我在 Azure 门户的函数应用程序中运行函数代码,它成功运行,如下所示,
关于python - 导入 azure.search.documents 时,Azure 函数未部署(时间触发器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76885963/