python - 导入 azure.search.documents 时,Azure 函数未部署(时间触发器)

标签 python azure azure-functions

我正在尝试在我的 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 函数计时器触发器成功运行,如下所示,

enter image description here enter image description here

然后,我将其部署到函数应用程序并成功部署,如下所示,

enter image description here

我在 Azure 门户的函数应用程序中运行函数代码,它成功运行,如下所示,

enter image description here

关于python - 导入 azure.search.documents 时,Azure 函数未部署(时间触发器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76885963/

相关文章:

azure - 无法从 wwwroot/bin 文件夹中删除 Azure Function dll

Azure AD、事件域和无缝登录

c# - 从代码部署 Azure 函数 (c#)

azure - Gitlab CI 无法从项目设置中选择变量

azure - 如何为站点到站点连接配置 Azure 功能?

javascript - 如何每 90 秒触发一次 Azure 计时器功能?

python - 在pylint中强制字符串格式

python - Supervisor 中的多个命令 - Python/Linux

python - OS X Pillow 安装错误

python - Ubuntu升级操作系统安装的python包