将数据作为输出绑定发送到 blob 容器的 Azure 函数

Azure function to send data to a blob container as the output binding

This 答案确实有一些帮助,但我正在寻找更清晰的例子和示例,理想情况下是节点环境(如果你知道的话,我将采用不同编程语言的高级方法)。我对云概念比较陌生;所以我可能缺少一些高层次的理解。

在上面的 link 中,@harikrishnarajoli-mt 解释了一个类似的场景:

Stored Queue's data from the blob container acts as output binding Scenario: Azure Function-HTTP Trigger using EF Core. Upon saving the data to the database, Queue will be used as an output binding to save the data to the local storage. Secondly, another function will be created upon insertion of data to the Queue store. Here Queue acts as an input binding and the queue's data will be stored in the Blob container as an output Binding. Blob container is used as output binding by specifying the Blob attribute for every queue trigger.

我了解如何创建一个 HTTP 触发器,用于将消息发送到存储队列。我卡在后半段了。 如何将数据存储在Blob容器中作为输出Binding?

我的具体情况:我在某个网站上有一个 API 托管发言。com/route1。我想将对那个端点所做的所有 requests/responses 存储在 azure-storage 中。编辑:我的游戏机是 >> http 触发队列消息 >> 队列消息触发要发送的 blob。

现在我有一个发送到队列的函数,但我终生无法弄清楚如何使用 Azure 函数发送到 blob 存储。 This 来自 Microsoft 的页面没有意义,因为我没有看到数据进入 blob 容器。

我的文件...

function.json

{
  "scriptFile": "./index.js",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post",
        "put",
        "delete"
      ]
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "outputQueue",
      "queueName": "apirequests",
      "connection": ""
    },
    {
    WHAT GOES IN HERE SO THAT THE OUTPUT CAN GO TO THE BLOB-CONTAINER? 
    }

  ]
}

index.js

const { v4: genId } = require('uuid');
module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    const reqBody = JSON.stringify(req.body);

    const wholeObj = {
        GUID: genId(),
        method: req.method,
        url: req.url,
        request: {
            headers: req.headers,
            body: reqBody
        }
        response: {..}
       ...more stuff...
    }
    context.bindings.outputQueue = `${wholeObj.GUID}.json`; // this line sends the GUID to the queue.

// how can I send the wholObj as a blob to my blob-container?

}

是否可以通过函数将数据发送到blob-container?我只看到它是用 azure-storage 这样的包完成的,但我想确认它是否可以用函数来完成? 请分享您对将什么添加到这两个文件以达到我想要的结果的任何建议?或者如果您认为我应该采取不同的方法,请分享!

谢谢

我不确定你的项目范围,但将你的 Node 应用程序连接到各种 Azure 组件的替代方法是 Dapr

Dapr 几乎作为一个 middle-man API 抽象出许多实际连接到 Blob 存储、事件中心或您可能正在使用的任何其他 Azure 组件的细节。这很好,因为它简化了新组件的连接,并且如果您更改云提供商,则可以轻松切换后端组件,而无需更改任何代码。

有一个 tutorial 用于输出绑定。我正在使用 Dapr 绑定到 EventHub 并写入 Blob 存储。

当我读到这篇文章时,一切都清楚了:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-expressions-patterns

路径属性保存容器的信息。即:

Most expressions are identified by wrapping them in curly braces. For example, in a queue trigger function, {queueTrigger} resolves to the queue message text. If the path property for a blob output binding is container/{queueTrigger} and the function is triggered by a queue message HelloWorld, a blob named HelloWorld is created.

所以我在下面为我的 queue-trigger 功能添加了我的 function.json 并且它正常工作。

....
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "containerName/{queueTrigger}",
      "connection": "",
      "direction": "out"
    }

有多个函数触发器。一个 azure 函数只能有 1 个触发器。

Azure 函数可以有多个输入和多个输出绑定。

您需要 2 个函数:

  1. 具有队列存储输出绑定的 httptrigger 函数。 Source

[StorageAccount("MyStorageConnectionAppSetting")]
public static class QueueFunctions
{
    [FunctionName("QueueOutput")]
    [return: Queue("myqueue-items")]
    public static string QueueOutput([HttpTrigger] dynamic input,  ILogger log)
    {
        log.LogInformation($"C# function processed: {input.Text}");
        return input.Text;
    }
}

  1. queuestoragetrigger 函数与 blob 存储输出绑定。 Source

 [FunctionName("queue")]  
    public static void Run([QueueTrigger("queue", Connection = "")]Queue queue,  
      [Blob("storage/{name}")] out string acceptedCCApplication,    
      Ilog log)  
    {  
      log.Info($"C# Queue trigger);
  
    }  

httptrigger 函数将输出到存储队列。一旦该消息到达存储队列,它将触发您的队列存储功能,该功能将输出到您的 blob 存储。

如果您想同时输出到队列和 blob,那么您只需要 1 个 http 触发器函数和 2 个队列和 blob 输出绑定。

此外,如果您不对存储的内容进行大量处理,则可以跳过队列存储。只需创建一个带有 blob 存储输出绑定的 httptrigger 函数。

以上示例基于.net。 他们可能有一些错误,但这只是开玩笑。