【Azure Function】Azure Function中的Timer Trigger無法自動觸發問題

路边两盏灯發表於2024-05-08

問題描述

在Azure Function中,部署了定時觸發器函式(Timer Trigger),卻無法按時觸發。

問題解答

登入Function的Kudu站點,檢視 logfiles中 application/function/host目錄下的日誌檔案,發現錯誤訊息:

Singleton lock renewal failed for blob 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/host' with error code 409: LeaseIdMismatchWithLeaseOperation. The last successful renewal completed at 2024-05-05T00:07:29.916Z (18845 milliseconds ago) with a duration of 48 milliseconds. The lease period was 15000 milliseconds.

這表示當前Function App不能從所繫結的Storage Account獲取Lease,無法為Timer Trigger提供觸發所需的Host ID / Lease ID資訊。多個function app不建議用同一個storage account,因為function app都會在storage account中儲存一個 host id,這個host id根據function app的名稱來算的,如果function app 的名稱長度大於32,就擷取前32位。如果是一樣的值,就會用同一個host id。導致出現爭搶 Singleton Lock情況。

【Azure Function】Azure Function中的Timer Trigger無法自動觸發問題

因為當前多個Function的確存在共用一個Stroage Account,並且名稱長度超過32為,並且前32位的字元和其它Function App一樣,所以引起了以上問題。在不能修改Function App的名字的情況下,透過修改位不同的Storage Account來解決了當前問題。

參考資料

AZFD0004:主機 ID 衝突:https://learn.microsoft.com/zh-cn/azure/azure-functions/errors-diagnostics/diagnostic-events/azfd0004#event-description

Host ID: https://learn.microsoft.com/zh-cn/azure/azure-functions/storage-considerations?tabs=azure-cli#host-id-considerations

相關文章