我使用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
最佳答案
好吧,当您执行 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 = *
:
关于python - Azure blob 触发器错误 :The condition specified using HTTP conditional header(s) is not met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66702735/