当前位置: 首页 > 知识库问答 >
问题:

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

楚宏胜
2023-03-14

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

这是预期的;然而,当将数据写入blob容器时。输出绑定检查带有“GET”请求的Blob是否存在,并在发出“PUT”请求之前最终进入404响应代码。这在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 prettyprint-override">{
   "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"
      }
   ]
}

共有1个答案

萧元徽
2023-03-14

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

至于“为什么”它会发生,我的猜测是它是在检查特定 Blob 所需的现有容器或其他资源时发生的。仅根据我们所知道的情况,很难说它究竟在哪里发生,但是在WebJobs SDK中看到的评论专门调用ExistsAsync来限制预期的40倍状态代码。如果潜入实现 ExistsAsyncMicrosoft.Azure.Storage.Blob 存储库,您可以看到 ExistsImpl 需要 404 状态代码来确定资源是否存在。

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

 类似资料:
  • 我有一个EventHubTrighted函数app。下面是方法签名的代码示例: @functionname(“foo”)@storageaccount(“foostorageRead”)public HttpResponseMessage run(@httptrigger(name=“req”,methods={httpmethod.post},authLevel=authorizationlev

  • 我想使用Python中的Azure函数将JSON数据作为. json文件上传到Azure存储Blob。 因为我使用的是Azure函数,而不是实际的服务器,所以我不想(也可能无法)在本地内存中创建一个临时文件,并使用Azure blob存储客户端库v2将该文件上载到Azure blob存储。1对于Python(这里有参考链接)。因此,我想为Azure函数使用输出blob存储绑定(这里有参考链接)。

  • 我正在创建多个 Azure 函数(HTTP 触发器)来从 blob 存储中获取内容,获取单个 blob 的几个元数据值,并获取特定 blob 类型的所有元数据属性。 我对使用绑定与使用blob存储的rest API与azure-storage sdk感到困惑。 创建azure函数时使用哪种方法最好?如果您能给我指出一些此类示例留档,那也会很有帮助。谢谢你。

  • 我在学习http://martinabbott.azurewebsites.net/2016/06/11/fun-with-azure-functions-and-the-emotion-api/ 我在集成选项卡中有名为“图片”的Blob触发器存储容器。myblob路径是“图片/{名称}”没有定义输入。输出是DocumentDB。我已经验证访问密钥是正确的。 我想知道错误的原因是什么?与 Azur

  • 我在 Azure blob 存储中有一个 csv 文件,我想打开该文件并根据用户输入获取某些数据。我有两个问题: 1)空AzureWebJobStorage值在local.settings.json 我尝试使用AzureWebJobsStorage输入绑定,但值似乎为空。我不知道如何在local.settings.json中编辑什么值。因此,得到这个错误: 已执行Functions.HttpExa

  • 我找到了这个代码示例,用于向Blob存储添加连接并向文件写入一些文本,但连接信息取决于包含连接字符串的环境变量名。我不知道如何提供一个包含连接字符串的密钥库秘密引用,而不是必须使用环境变量名和连接字符串。 调用的函数如下所示: 这样做的目的是只对连接字符串的更改使用我的密钥存储库机密,并将连接字符串排除在配置文件之外。

  • 我对Azure函数和CosmosDB输出绑定有问题。我现在拥有的是:我从一个Cosmos DB容器中读取数据,处理一些东西,然后将结果输出回同一个DB但不同的容器。我正在使用VSCode和python,并测试了其他输出(blob、HTTP响应等),所有这些都正常工作,所以我认为这是CosmosDB的问题。 主要功能定义如下: function.json输出绑定如下: 请注意,我使用和我的扩展手动安

  • 我已经定义了一个Azure函数,它使用Azure存储队列触发器和Blob输入绑定。我已经为队列触发器准备了一个POCO,但是如何在blob输入绑定中将该POCO与绑定表达式一起使用呢? 建筑: Azure功能2。x POCO: Azure功能: 队列消息: 错误消息: 系统私有的CoreLib:执行函数profileImageUpload时发生异常。微软蔚蓝色的WebJobs。主机:异常绑定参数“