An Azure service that provides an event-driven serverless compute platform.
[KuduSpecializer] Kudu has been restarted after package deployed for deployment 是在部署後由平台產生的訊息,表示 Functions 主機/Kudu 在新的程式包部署完成後被重新啟動或重新掛載,屬於部署流程的一部分,而不是應用程式層級的錯誤。
在 Flex Consumption 計畫中,部署流程是:
- 將專案程式碼建置並壓縮成 application package(zip)。
- 將 package 部署到儲存體容器。
- Function App 啟動時從該 package 載入並執行程式碼。
在這個過程中,平台會在新 package 就緒後重新啟動 Kudu/站台,以掛載新的部署包,因此會看到類似 Kudu has been restarted after package deployed 的訊息。若在這個階段用 SDK 或 API 輪詢狀態,可能會在短時間內遇到連線中斷或暫時無法回應,看起來像「錯誤」,但實際上是正常的滾動更新行為。
要降低影響、避免把這類訊息當成錯誤,可採取:
- 使用部署狀態訊號而不是立即輪詢:
- Flex Consumption 提供「Flex Consumption Deployment」診斷工具,可在入口網站中查看部署歷史、package 狀態與建議,確認部署是否成功完成,而不是在部署剛送出後頻繁輪詢。
- 在輪詢邏輯中加入重試與延遲:
- 在部署 API 回傳成功後,先等待一段時間再開始輪詢。
- 對於短暫的 5xx 或連線錯誤實作指數退避重試,直到 Function App 穩定掛載新 package。
- 確保部署流程符合 Flex Consumption 模式:
- Flex Consumption 採單一路徑:建置→壓縮→部署到儲存體→由執行階段從 package 執行,無需透過額外的 app settings 來控制部署行為。避免自行修改會干擾此流程的設定。
- 若需要零停機行為:
- Flex Consumption 支援以 rolling updates 的方式進行零停機部署(預覽功能),平台會逐步套用新程式碼與設定,減少因重啟造成的影響。
總結:這個訊息代表部署後平台正在重新啟動/掛載新 package,是正常行為。建議在自動化流程中把它視為資訊訊息,並透過延遲輪詢、重試與診斷工具來判斷部署是否真正完成,而不是在 Kudu 重啟期間立即判定為錯誤。
References: