在使用 Azure Functions 的 灵活消耗模式时,开发人员在为 Python 函数应用设置 Blob 触发器 时可能会遇到挑战。本文概述了解决方案,以确保 Blob 触发器按预期工作,并提供了用于实现的其他资源。
问题概述
在尝试配置 Blob 触发器 时会出现问题,该触发器用于部署在 灵活消耗模式下的 Python 函数应用。尽管部署正确,但当 Blob 上传到指定容器时,触发器可能无法激活。常见症状包括:
- Blob 触发器不触发。
- 在 Application Insights 中监视时不显示任何请求。
- 有关灵活消耗模式下 Blob 触发器的文档和示例有限或不清楚。
根本原因
灵活消耗模式下的 Blob 触发器需要 基于 Event Grid 的触发器 才能正常工作。这与标准消耗计划中默认的 Blob 触发器行为不同。配置错误或依赖过时的文档可能导致部署失败。
解决方案
通过改用 基于 Event Grid 的触发器 来处理 Blob 存储,问题得到了解决。以下是实施该解决方案的步骤:
在灵活消耗模式下配置 Blob 触发器的步骤
- 使用 Event Grid 处理 Blob 存储
Azure Blob 存储触发器依赖 Event Grid 通知才能在灵活消耗模式下工作。请参阅此处的官方文档: 适用于 Azure Functions 的 Azure Blob 存储触发器。 - 更新函数代码
确保 Python 函数应用已配置为处理 Event Grid 事件。以下是函数代码示例:
import logging
import azure.functions as func
def main(event: func.EventGridEvent):
logging.info('Event received: %s', event.get_json())
- 配置 Blob 存储和 Event Grid
- 创建 Blob 存储帐户 并启用 Event Grid 通知。
- 设置 Event Grid 订阅,将事件转发到 Azure 函数。
- 使用 Bicep 或 ARM 模板进行部署
以下是使用 Event Grid 集成部署函数应用的 Bicep 模板示例:
resource blobStorage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'myBlobStorage'
location: 'East US'
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource eventGridSubscription 'Microsoft.EventGrid/eventSubscriptions@2022-06-15' = {
name: 'myBlobEventSubscription'
scope: blobStorage
properties: {
destination: {
endpointType: 'AzureFunction'
properties: {
functionAppResourceId: '<FunctionAppResourceId>'
}
}
filter: {
includedEventTypes: [
'Microsoft.Storage.BlobCreated'
]
}
}
}
- 验证部署
- 将 Blob 上传到 Blob 存储中的指定容器。
- 查看 Application Insights 中的传入请求。
其他说明
- 如果你使用 GitHub Actions 或 Azure DevOps 进行部署,请确保应用了灵活消耗模式的正确设置。
- 若要进行故障排查,请参阅 Azure Functions 监视 ,以了解触发器活动的相关信息。
结论
通过使用 基于 Event Grid 的触发器,可以解决在灵活消耗模式下为 Python 函数应用配置 Blob 触发器的问题。按照上述步骤操作,可以确保 Blob 触发器与 Azure Functions 无缝协作。
如需了解详细信息,请参阅官方文档: 适用于 Azure Functions 的 Azure Blob 存储触发器。