当前位置: 首页 > 知识库问答 >
问题:

使用blob存储输入和输出Python的事件网格触发器Azure函数

桑飞语
2023-03-14

我正在寻找合适的资源/教程,可以帮助我开发和部署事件网格触发器,该触发器将等待图像上传到blob容器,使用python处理该图像,然后将结果保存在另一个blob容器中。我发现了许多单独的文档,它们不一定在逻辑上指导我使用Azure Portal和VSCode进行开发和部署,就像从头到尾的一步一步的演练,介绍了实现这一点的所有步骤。

任何指导将不胜感激。

共有1个答案

司马英才
2023-03-14

我不推荐你直接用Azure portal开发。而且既然需要使用基于Python开发Azure function,那么就需要使用Azure function核心工具。

1、下载并安装Azure功能核心工具。(下载函数3.x)

https://docs . Microsoft . com/en-us/azure/azure-函数/函数-运行-本地?tabs=windows,csharp,bash#v2

并且需要安装python 3.8.x(请注意必须下载64bit。否则功能应用程序在启动时将会出错。)

2、配置Python到系统路径。

3,在VS代码中安装函数扩展和Python调试扩展。

4、按f1并输入'func',您将找到创建功能选项。

5、按照创建函数的步骤操作。然后使用以下代码:

function.json代码

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "type": "eventGridTrigger",
      "name": "event",
      "direction": "in"
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "test1/6.txt",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "test2/6.txt",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ]
}

local.settings.json代码

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "MyStorageConnectionAppSetting":"DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx==;EndpointSuffix=core.windows.net"
  }
}

__init__py

import json
import logging

import azure.functions as func


def main(event: func.EventGridEvent, inputblob: func.InputStream, outputblob: func.Out[func.InputStream]):
    result = json.dumps({
        'id': event.id,
        'data': event.get_json(),
        'topic': event.topic,
        'subject': event.subject,
        'event_type': event.event_type,
    })

    logging.info('Python EventGrid trigger processed an event: %s', result)

    #Do something here. you can change below inputblob to other stream.

    outputblob.set(inputblob)

完成上述所有步骤后,创建事件网格订阅并将功能应用程序部署到azure。将事件网格指向函数应用程序。然后,当事件发生时,该功能将被触发。

您需要注意的是,Python不支持绑定器,因此…无法在运行时指定路径。(这很遗憾。Ibinder仅支持基于.Net的语言。)

以上是你的要求,它可以工作,但是blob路径不能是动态的...我认为对于你的情况,更合适的方法是使用blob触发器和blob输出绑定。(这可以从触发器到输出获取blob名称。)

 类似资料:
  • 当我的函数方法签名如下时,我有一个成功触发的v3 WebJob: 然而,当我添加一个输出blob时,BlobTrigger永远不会触发。 下面的文档如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#output

  • 我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此

  • Azure函数存储帐户Blob容器触发器 在我们的一个用例中,我正在为具有以下条件的存储帐户容器中的任何活动寻找Azure函数触发器 < li >具有特定命名约定的容器(名称如xxxx-input) < li >它应该自动检测是否创建了新的容器(具有特定的命名约定) < li>

  • 我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。 每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。 在某些情况下,对于我们未知的情况,事件网格主

  • 我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关

  • 在Azure function中,你可以创建一个函数来监听某个事件的变化,比如消息总线、blob存储等等... 如果您正在使用azure功能,并且您的目标是通过侦听事件(如消息总线、blob存储或任何其他内置触发器)来处理某些事情,那么您有什么理由希望将事件网格放在中间层吗?即,您不希望azure函数直接侦听blob存储更改,而是希望azure函数侦听正在侦听blob存储器更改事件的事件网格。 谢