我有如下定义的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状态代码。如果深入到实现ExistsAsync
的Microsoft.Azure.Storage.Blob
repo,您可以看到ExistsImpl
期望404状态代码来确定资源是否存在。
为了绕过404,您可能只需要自己使用BlobClient
,然后直接创建您需要创建的内容,而无需检查现有资源。不过,这是一个公平的警告,最终可能会导致比预期的404多得多的问题(顺便说一句,404几乎不会引起任何问题,因为它是由SDK和存储库处理的(。