python - Azure blob 触发器错误 :The condition specified using HTTP conditional header(s) is not met

标签 python azure azure-functions azure-blob-storage azure-blob-trigger

我使用python azure函数使用以下代码从azure blob获取触发器

import azure.functions as func
def main(blobdata: func.InputStream):
    totalprocessingtime = time.time()
    filename=os.path.basename(blobdata.name)
    blobfilepath = str(blobdata.name).replace(str(filesystemName)+"/","")
    logging.error("blobfilepath: "+ blobfilepath)

当在 blob 中上传文件时会触发。但有时会出现以下错误。我没有设置 header 或任何内容来连接 blob。(在绑定(bind)设置中使用连接字符串)。知道错误的原因是什么吗?

Executed 'Functions.blobprocessor' (Failed, Id=91e051f4-4e19-4892-91bc-aa6921579ba8, Duration=77ms)
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: Functions.timeseries2sqlprocessor
 ---> System.InvalidOperationException: Exception binding parameter 'blobdata'
 ---> Microsoft.WindowsAzure.Storage.StorageException: The condition specified using HTTP conditional header(s) is not met.
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteAsyncInternal[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
   at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DownloadRangeToStreamAsync(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext, IProgress`1 progressHandler, CancellationToken cancellationToken)
   at Microsoft.WindowsAzure.Storage.Blob.BlobReadStream.DispatchReadAsync(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.Stream.CopyToAsyncInternal(Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
   at Microsoft.Azure.WebJobs.Host.Blobs.WatchableReadStream.CopyToAsyncCore(Task baseTask) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\Blobs\WatchableReadStream.cs:line 40
   at Microsoft.Azure.WebJobs.ConverterManager.<>c.<<-ctor>b__4_4>d.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\ConverterManager.cs:line 74
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Azure.WebJobs.ConverterManager.<>c__DisplayClass12_0`2.<<AddExactConverter>b__0>d.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\ConverterManager.cs:line 213
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Azure.WebJobs.ConverterManager.<>c__DisplayClass20_1`2.<<GetComposition>b__0>d.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\ConverterManager.cs:line 439
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Azure.WebJobs.IConverterManagerExtensions.<>c__DisplayClass1_0`2.<<AsTyped>b__0>d.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\IConverterManager.cs:line 52
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Azure.WebJobs.Host.Bindings.TriggerAdapterBindingProvider`2.ExactBinding`1.BindAsync(Object value, ValueBindingContext context) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\BindingProviders\TriggerAdapterBindingProvider.cs:line 217
   at Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.TriggerWrapper.BindAsync(Object value, ValueBindingContext context) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Indexers\FunctionIndexer.cs:line 496
   at Microsoft.Azure.WebJobs.Host.Triggers.TriggeredFunctionBinding`1.BindCoreAsync(ValueBindingContext context, Object value, IDictionary`2 parameters) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Triggers\TriggeredFunctionBinding.cs:line 56
Request Information
RequestID:4e02bac0-501e-006b-1e54-1b1ac2000000
RequestDate:Wed, 17 Mar 2021 17:39:10 GMT
StatusMessage:The condition specified using HTTP conditional header(s) is not met.
ErrorCode:ConditionNotMet
ErrorMessage:The condition specified using HTTP conditional header(s) is not met.
RequestId:4e02bac0-501e-006b-1e54-1b1ac2000000
Time:2021-03-17T17:39:10.6470643Z

绑定(bind) enter image description here

最佳答案

好吧,当您执行 Blob write 操作时,Blob 的 ETag 会被重置,比方说 0x8CDA1BF0593B660。而且,在触发之前(ETag 值 0x8CDA1BF0593B660),该 blob 会被另一个服务更新,并且它的 ETag 会更改为 0x8CDA1BF0593B661

现在,当您的 Azure Blob 触发函数应用尝试读取它(ETag 值 0x8CDA1BF0593B660)时,它与预期不符,并收到此错误。

此错误情况类似于Azure Blob: "The condition specified using HTTP conditional header(s) is not met"Azure Blob Error: StorageException: The condition specified using HTTP conditional header(s) is not met

可以修复此问题(未经测试),在 Blob 触发器属性中添加 Access => if match = *:

enter image description here

关于python - Azure blob 触发器错误 :The condition specified using HTTP conditional header(s) is not met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66702735/

相关文章:

Azure 函数无法识别 Get-AzADApplication

python - django.db.utils.DatabaseError : ORA-30673: column to be modified is not an identity column

python - 无法通过网络浏览器访问 pi 相机

python - 为什么 iPython 中可以使用斜杠调用函数?

Python:文件中的字母数,简单而有效的方法

sql-server - Azure Functions - 如何连接到本地 SQL Server Express 数据库?

azure - 使用 VSTS 设置 Azure Function 应用程序设置,而无需在 Azure 门户中公开

azure - 调试 yaml 管道脚本

azure-functions - Azure Function - 防止多次调用

c# - 从 Azure 函数中的 local.settings.json 读取自定义设置