azure - 如何在 Azure 函数输出绑定中禁用 Blob 存在检查
问题描述
我的 Azure 函数注释定义如下。Blob 触发器从存储帐户进程读取数据并使用返回值将输出写入绑定中定义的“文件名”.json 的 Blob 容器。
这按预期工作;但是,在将数据写入 blob 容器时。输出绑定通过“GET”请求检查是否存在 Blob,并最终在发出“PUT”请求之前进入 404 响应代码。这是在 Application Insights 中捕获的。
有什么办法可以覆盖这种行为? 此处为 Log Analytics 的屏幕截图
函数绑定
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 状态代码。如果深入到实现 的Microsoft.Azure.Storage.Blob
repo 中ExistsAsync
,您可以看到ExistsImpl
预期的 404 状态代码来确定资源是否存在。
为了规避 404,您也许可以只使用BlobClient
自己,然后直接创建您需要创建的内容,而无需检查现有资源。不过,一个公平的警告,这最终可能会导致比预期的 404 更多的问题(而且,404 几乎不会导致任何问题,因为它是由 SDK 和存储库处理的)。
推荐阅读
- android-studio - 为什么我的数据库文件夹显示正在加载...?
- amazon-web-services - 从 docker-compose.yml 到 Dockerrun.aws.json
- javascript - 曲线 25519 标量乘法库
- mysql - 存储在数据库中的日期和从数据库中获取的日期不同
- return - return 语句未按预期工作
- python - Cython 定义函数的类型
- angular - 如何使用角度通用预渲染执行 http 请求?
- python - 当模型有外键时,django-seeder 是否也使用?
- javascript - 使用 localstorage 将变量的值从子域传递到域
- python - 使用 py2app 将 python 应用程序转换为独立应用程序的正确方法是什么?