Try   HackMD

新人資訊

技術-後台類-azure function #4-自動定時執行

基於目前掌握的技術:1. azure function 基本結構,2. 爬蟲整合,3. 資料庫整合,接下來要讓程式自動化執行。記得在初次建立 function 的第一步,就必須選擇「專案類型」,當時我們選擇了「HttpTrigger」,從一開始程式結構就已經區分開,所以必須新增一個新的 function,用 vs code 同專案裡新增一個 function,選擇 Timer trigger,取一個名稱,設定執行頻率,預設為每五分鐘執行一次,設定格式遵照 NCronTab,可參閱文件。

即刻原封不動執行偵錯,觀察 logging 確認執行正常,這得來也未免太容易了吧!

把之前在 HttpTrigger 的程式移植過來,三行就搞定了,差別在於 day 參數本來是用網址列傳入,改成去抓系統當天的日期,語法也很簡單。記得相關的 import 和函數本體也要一併移植。為了測試方便將執行頻率改成每分鐘;只要修改 function.json 即可。

啟動偵錯,觀察 log,一切正常。

到了最後一步 deploy to azure,設定正式執行時間為每日下午三點,也就是 UTC Time 七點。

觀察 azure 主控台,已經多了一個 function,時間正好過了下午三點,顯示執行一次。查詢資料庫,當天的最新資料已經填入了。

附帶一提,我曾經使用 asp.net code 平台開發 background job,其複雜度門檻有點高,文件也附在後面,好不容易開發出來後 deploy to azure app service 卻發現無法自動執行,困擾許久後才發現 app service 的免費層是不支援「always on」的,意思是當網站一段時間沒人使用後,後台就會進入「休眠」狀態,因此 background job 也就跟著罷工了!現在使用 function app 輕易就過了這個坎,真是大大爽快呀!

完成以上開發和佈署,如同請了一個忠信的小幫手,每天下午三點時間一到就會乖乖地達成任務,在所設計的結構基礎上累積資料。下一步也許會想要把資料整批擷取出來用表格或圖表呈現,function app 不只是抓資料,也將搖身一變成為資料的供應者 api service,成為分析應用的後台支柱。待續。

By Newman Chen 2022/3/4

參考資料:

https://github.com/atifaziz/NCrontab

https://docs.microsoft.com/zh-tw/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&tabs=visual-studio