【Azure 應用服務】Azure Function HTTP 觸發後, 230秒就超時。而其他方式觸發的Function, 執行5分鐘後也超時,如何調整超時時間?
- 2021 年 8 月 5 日
- 筆記
- 【Azure 應用服務】, App Service, Azure Developer, Azure Durable Functions, Azure Function, Azure Function 5分鐘超時問題, HTTP 觸發後, 230秒就超時
問題描述
Azure Function HTTP 觸發後, 230秒就超時,而其他方式觸發的Function, 執行5分鐘後也超時,如何調整超時時間?
問題分析
查閱官方文檔,對函數應用超時持續時間有詳細介紹:最新的3.X版本的默認值根據Function計劃的類型不同而不同,默認的最少為5分鐘,最大30分鐘。消耗計劃的Function最大可調整為10分鐘,而其他兩種無限制。
但是,非常非常重要的一點是:如果Function是HTTP觸發類型。它的響應時間最大最大就是230秒。 這是因為 Azure 負載均衡器的默認空閑超時就是230秒,作為PaaS服務的Azure Funciton (相同的還有App Service)無法改動。
(Source : //docs.microsoft.com/zh-cn/azure/azure-functions/functions-scale#function-app-timeout-duration)
問題解決
1) 進入Function App的Azure 門戶頁面: Function App – Microsoft Azure 由世紀互聯運營
2) 點擊「App Service Editor 「, 進入源程式碼查看頁面,選擇 host.json。 修改 functionTimeout 內容。如沒有 functionTimeout,則根據以下格式自行添加。
3)如果是 HTTP觸發的函數,而且其Function所運行的任務會處理很長時間,建議使用Function的另一種模式 【Durable Function 非同步模式】, 或者通過程式碼的方式,自行解決延遲響應返回。
Durable Function 非同步模式
非同步 HTTP API 模式解決了使用外部客戶端協調長時間運行的操作的狀態時出現的問題。 實現此模式的一種常用方式是讓 HTTP 終結點觸髮長時間運行的操作。 然後,將客戶端重定向到某個狀態終結點(Location),客戶端可輪詢該終結點(Location),以了解操作是何時完成的。
Durable Functions 默認支援HTTP API 非同步模式,可以簡化甚至消除為了與長時間運行的函數執行進行交互而需要編寫的程式碼。
- C#程式碼可以參考:使用 C# 創建你的第一個持久函數(//docs.microsoft.com/zh-cn/azure/azure-functions/durable/durable-functions-create-first-csharp?pivots=code-editor-vscode)
- JavaScript程式碼參考:使用 JavaScript 創建你的第一個持久函數(//docs.microsoft.com/zh-cn/azure/azure-functions/durable/quickstart-js-vscode)
啟動實例後,該擴展會公開 Webhook HTTP API 用於查詢業務流程協調程式函數的狀態。
參考資料
函數應用超時持續時間: //docs.microsoft.com/zh-cn/azure/azure-functions/functions-scale#function-app-timeout-duration
Function host.json functionTimeout : //docs.microsoft.com/zh-cn/azure/azure-functions/functions-host-json#functiontimeout
Durable Function 非同步 HTTP API 模式: //docs.microsoft.com/zh-cn/azure/azure-functions/durable/durable-functions-overview?tabs=csharp#pattern-3-async-http-apis
【完】