Azure 数据工厂存储事件触发器未启动管道

问题描述 投票:0回答:1

我创建了一个存储事件触发器来启动 Azure 数据工厂中的管道。我知道它配置得很好,因为我可以在通过 UI 手动上传 Blob 后成功触发它。但是使用 TypeScript 和下面的脚本,可以成功创建 blob,但事件触发器不起作用。我读到我们需要使用 Flush 方法,但不确定如何在 TypeScript 中完成。

这是我正在使用的代码:

import { BlobServiceClient } from "@azure/storage-blob"

async function handleWriteToBlob(blobData, insurance) {
  const jsonData = sendJson(blobData);
  const containerName = "raw-layer";
  const fileName = blobData['timestamp'];
  const blobName = `/folder_name/${insurance}/${insurance}-insurance_form-${fileName.toISOString()}.json`;

  const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net?${sasToken}`);
  const containerClient = blobServiceClient.getContainerClient(containerName)
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  const options = {
    blobHTTPHeaders: {
      blobContentType: 'application/json'
    },
    bufferThreshold: 4 * 1024 * 1024, // 4MB
    maxBuffers: 20 // 80MB
  };

  const result = await blockBlobClient.upload(
    jsonData,
    jsonData.length,
    options
  );

  if (result.errorCode) {
    throw Error(result.errorCode);
  }

  console.log(`Uploaded BlockBlob ${blobName} successfully as: ${jsonData}`);
}

function sendJson(blobData) {
  console.log(`${JSON.stringify(blobData)}`);
  return JSON.stringify(blobData);
}
typescript azure azure-data-factory azure-synapse eventtrigger
1个回答
0
投票

不幸的是,在研究了这个主题之后,似乎“存储事件触发器”仅在我们将文件上传到 blob 存储时才起作用,而当文件通过编程方式发送时(至少使用 npm 模块)则不起作用。

只有 2 个选项,如下所述:

选项 A(使用 Typescript)

在事件网格中创建自定义主题

创建自定义事件触发器以在 Azure 数据工厂中运行管道

使用 Azure EventGrid 节点包发布您的事件,上传文件后,使用与我的问题中相同的代码

选项 B(使用 REST API)

https://learn.microsoft.com/en-us/azure/event-grid/event-schema-blob-storage?tabs=event-grid-event-schema

Microsoft.Storage.BlobCreated

创建或替换 Blob 时触发。具体来说,当客户端使用 Blob REST API 中可用的 PutBlob、PutBlockList 或 CopyBlob 操作以及完全提交块 Blob 时,会触发此事件。

© www.soinside.com 2019 - 2024. All rights reserved.