【问题标题】:How to disable Blob existence check in Azure function Output Binding如何在 Azure 函数输出绑定中禁用 Blob 存在检查
【发布时间】:2021-02-09 06:02:28
【问题描述】:

我有如下定义的 Azure 函数注释。 Blob 触发器从存储帐户进程中读取数据,并使用返回值将输出写入 Blob 容器,并在绑定中定义了“filename”.json。

这是按预期工作的;但是,在将数据写入 blob 容器时。输出绑定通过“GET”请求检查是否存在 Blob,并最终在发出“PUT”请求之前进入 404 响应代码。这是在 Application Insights 中捕获的。

有什么方法可以覆盖这种行为吗? Screen shot of Log analytics here

函数绑定

public class ProcessZipFiles2Cosmos {
    
    @FunctionName("ProcessZipFiles2Cosmos")
    @StorageAccount("blobStorageAccount")
    @BlobOutput(name = "blob_redacted_json", path = "nonpii/{filename}.json")
    public static String run(
        @BlobTrigger(name = "files", dataType = "binary", path = "transactedreturn/{name}", connection = "blobStorageAccount") byte[] content,
        @BindingName("name") String filename,
        @CosmosDBOutput(name = "cosmos_transacted", databaseName = "tax-return-data-ops", collectionName = "TransactedReturns", 
                        connectionStringSetting = "AzureCosmosDBConnection") OutputBinding<String> cosmosItem,
        final ExecutionContext context) {
        
        // function body
    }
}

FUNCTION.JSON

{
   "scriptFile":"../transactedreturn-1.0.0-SNAPSHOT.jar",
   "entryPoint":"com.hrblock.clzconverter.ProcessZipFiles2Cosmos.run",
   "bindings":[
      {
         "type":"blobTrigger",
         "direction":"in",
         "name":"files",
         "path":"transactedreturn/{name}",
         "dataType":"binary",
         "connection":"blobStorageAccount"
      },
      {
         "type":"cosmosDB",
         "direction":"out",
         "name":"cosmos_transacted",
         "databaseName":"tax-return-data-ops",
         "connectionStringSetting":"AzureCosmosDBConnection",
         "collectionName":"TransactedReturns"
      },
      {
         "type":"blob",
         "direction":"out",
         "name":"$return",
         "path":"nonpii/{filename}.json",
         "connection":"blobStorageAccount"
      }
   ]
}

【问题讨论】:

    标签: azure azure-functions azure-blob-storage azure-log-analytics azure-java-sdk


    【解决方案1】:

    当您说“覆盖此行为”时,我认为您想规避“存在”检查,这最终导致了 404(如我所见),由 Blob 绑定完成。虽然这是可能的,但它并没有真正起到任何实际作用。 预期的 404 真的那么糟糕吗?

    至于“为什么”会发生这种情况,我的猜测是它是在检查现有容器或其他资源时发生的,这是您特定的Blob 所需的。仅据我们所知,很难判断它到底发生在哪里,但看到的评论 in the WebJobs SDK 专门调用 ExistsAsync 来限制预期的 40x 状态代码。如果深入到实现了ExistsAsyncMicrosoft.Azure.Storage.Blob repo,您​​可以查看ExistsImpl expecting a 404 status code 以确定资源是否存在。

    要绕过 404,您也许可以自己使用 BlobClient,然后直接创建您需要创建的内容,而无需检查现有资源。不过,一个公平的警告,这最终可能会导致比预期的 404 更多的问题(而且,404 几乎不会导致任何问题,因为它是由 SDK 和存储库处理的)。

    【讨论】:

    • 是的,我的意思是在使用 Log Analytics 捕获日志时避免此“存在”检查并覆盖它是否已经存在或至少在此请求的“404”中不存在我同意你的看法当 blob 被写入容器时,它正在检查是否存在,但我并不关心资源是否存在;我不更新它;我想盲目地覆盖它。我可以自定义实现 Blob 写入。但是,我无法在日志分析中有效地捕获日志,并且必须实施自定义遥测来捕获每个服务请求的延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2017-04-06
    • 2019-09-14
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多