我用 python 创建了一个 blob 触发函数应用程序。
我的存储帐户中还有一个 Blob 存储。
设置(local.settings,function.json)似乎没问题。
运行: func start 并在 blob 中上传文件后,没有任何反应。
这是代码:
import logging
from azure.functions import InputStream
import pandas as pd
import datetime
from datetime import datetime as dt
from datetime import date,timedelta
import datetime
from dateutil.relativedelta import relativedelta
import numpy as np
import os
import azure.storage.blob
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
import azure.functions as func
default_credential = DefaultAzureCredential()
def main(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {myblob.name}\n"
f"Blob Size: {myblob.length} bytes")
try:
# Process the blob data here
data = myblob.read()
logging.info(f"Blob content: {data}")
except Exception as e:
logging.error(f"Error processing blob: {str(e)}")
我只是想看看日志记录在上传新文件后是否正常工作。 func run 后我也没有收到任何错误。 您能指导我如何克服这个问题吗?
我可以用我的笔记本读取/写入 blob,但功能应用程序无法正常工作。
以下是一些可解决 Azure 函数 Blob 触发器无法正常工作的原因和步骤:
1. 检查函数日志
-
启用详细日志记录: 确保你的函数日志配置为包含详细级别。这将有助于捕获任何错误或警告。
- 在 Azure 门户中,导航到你的函数应用,然后选择“平台功能”下的“监控”。
- 在“诊断和解决问题”部分,选择“应用服务日志”。
- 确保将“应用程序日志(FileSystem)”设置为“错误”以上级别,理想情况下为“信息”或“详细”。
-
查看日志流: 部署函数并上传 blob 后,通过“Log Streaming”在门户中检查你的函数应用日志,或使用 Azure Monitor 之类的工具。查找任何错误消息或意外行为的迹象。
2. 验证函数配置
-
function.json:
-
确保路径属性中的 Blob 容器名称和文件扩展名过滤器与你的设置匹配。例如,
"path": "mycontainer/input/{name}.csv"
将触发名为“input”的容器中扩展名为“.csv”的 blob。 -
确认触发器和绑定配置正确,包括连接字符串设置。它应该是
"connection": "your_storage_connection_string"
而不是"connection": "AzureWebJobsStorage"
。
-
确保路径属性中的 Blob 容器名称和文件扩展名过滤器与你的设置匹配。例如,
-
本地设置:
-
如果你在本地运行,请确认你的
local.settings.json
文件包含存储连接字符串,并且密钥名称在你的function.json
中正确引用。密钥名称应为"AzureWebJobsStorage"
。
-
如果你在本地运行,请确认你的
-
存储连接字符串:
- 仔细检查你的存储连接字符串是否有效且具有对存储帐户的必要权限。
3. Blob 存储和函数应用配置
-
相同的区域: 为了获得最佳性能并避免额外的成本,请确保你的存储帐户和函数应用位于同一 Azure 区域。
-
触发器验证:
- 在门户中,导航到你的函数应用并选择“函数”。
- 选择你的 Blob 触发函数并转到“集成”。
- 在 Blob 触发器下,选择“编辑”。
- 单击“测试连接”以验证 Azure 函数是否可以连接到你的存储帐户。
4. 代码问题
-
异常处理:
- 你的代码包含一个 try-except 块。但是,你只在日志中记录错误。根据错误,你可能希望采取其他措施或引发异常以发出更明显的故障信号。
-
Blob 内容读取:
- 你的代码正在读取 Blob 内容,但没有对它做任何事情。添加一些逻辑来处理数据或在日志中记录更多信息,以确认函数是否按预期工作。
5. 其他事项
- 函数应用重启: 保存对函数应用的任何配置更改后,请尝试重启它。
- 部署模式: 确认你使用的是正确的部署模式(例如,编辑模式与运行模式)。
- 网络连接: 如果你的函数运行在受限网络中,请确保它可以访问存储帐户。
如果你在执行这些步骤后仍然遇到问题,请提供以下信息,以便我可以提供进一步的帮助:
- 函数应用日志中的任何错误消息或异常。
-
你的
function.json
和相关的local.settings.json
文件(删除任何敏感信息)。 - 你用来部署函数应用的方法。
- 你的存储帐户和函数应用所在的 Azure 区域。