如何在Azure函数输出绑定中禁用Blob存在性检查



我有如下定义的Azure函数注释。Blob触发器从存储帐户进程读取数据,并使用返回值将Output写入Blob容器;文件名";。json。

这正在按预期进行;但是,当将数据写入blob容器时。输出绑定正在检查Blob是否存在;获取";请求并最终进入404响应代码;PUT";要求这已在Application Insights中捕获。

有什么办法可以替代这种行为吗?这里的日志分析屏幕截图

功能绑定

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
}
}

函数.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"
}
]
}

当你说"覆盖该行为";,我认为你想绕过";存在";检查,这最终导致了404(在我看来(,由Blob绑定完成。虽然这是可能的,但它不会真正起到任何真正的作用。预期的404真的那么糟糕吗?

关于";为什么";它正在发生,我猜测它是在检查特定Blob所需的现有容器或其他资源时发生的。根据我们所知,很难判断它到底发生在哪里,但WebJobs SDK中的注释专门调用ExistsAsync来限制预期的40x状态代码。如果深入到实现ExistsAsyncMicrosoft.Azure.Storage.Blobrepo,您可以看到ExistsImpl期望404状态代码来确定资源是否存在。

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

相关内容

  • 没有找到相关文章

最新更新