天天看點

【Azure 應用服務】Storage Queue觸發Azure Function時報錯 The input is not a valid Base-64 string

問題描述

建立一個PowerShell腳本的Azure Function,觸發方式為 Storage Queue。但執行函數結果一直失敗 (Failed).

錯誤消息為:

Executed 'Functions.QueueTrigger1' (Failed, Id=..., Duration=30ms) The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

Funciton 代碼:

# Input bindings are passed in via param block.
param([string] $QueueItem, $TriggerMetadata)

# Write out the queue message and metadata to the information log.
Write-Host "PowerShell queue trigger function processed work item: $QueueItem"
Write-Host "Queue item expiration time: $($TriggerMetadata.ExpirationTime)"
Write-Host "Queue item insertion time: $($TriggerMetadata.InsertionTime)"
Write-Host "Queue item next visible time: $($TriggerMetadata.NextVisibleTime)"
Write-Host "ID: $($TriggerMetadata.Id)"
Write-Host "Pop receipt: $($TriggerMetadata.PopReceipt)"
Write-Host "Dequeue count: $($TriggerMetadata.DequeueCount)"      

通過向Storage Queue中添加消息時候觸發:

az storage message put --content "This is a function test message"       

問題分析

根據錯誤消息,Function (Storage Queue)觸發的消息需要 Base64編碼,如發送 "This is a function test message"  這段消息,需要在發送消息時候轉換為base64編碼。

【Azure 應用服務】Storage Queue觸發Azure Function時報錯 The input is not a valid Base-64 string

在CMD中調用PowerShell進行類型轉換:

powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"This is a function test message\"))"      

在Powershell中直接轉換:

[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("This is a function test message"))      

是以,修改後的向Storage Queue中添加消息的指令為:

$queuemsg = [convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("This is a function test message"))

az storage message put --content $queuemsg       

參考資料

适用于 Azure Functions 的 Azure 隊列存儲觸發器: https://docs.azure.cn/zh-cn/azure-functions/functions-bindings-storage-queue-trigger?tabs=powershell#encoding

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀