建立與使用Azure Functions
Azure Functions 是微軟所提供的雲端 Server-less 服務,可讓開發人員在 Azure 上撰寫簡短的程式碼(functions)。以便於來執行例行性的工作,例如:
- 固定時間執行特定動作。
- 每當OOO發生的時候,執行XXX動作。
Azure Functions 之所以稱為 server-less functions,意思是,可讓您在不需要額外建置、管理伺服器或底層架構的情況下,直接執行程式碼(functions)。您只需要專注於寫出正確的程式碼,Azure 會負責在背景中執行,同時讓您透過 azure portal 來管理和備份程式碼。
舉例來說
舉例來說,過去我曾幫用戶建立一個解決方案,每當用戶把圖檔或影片上傳到 azure blob(儲存體)之後,就自動呼叫Azure cognitive services,辨識影像圖片中的人臉,並且將結果紀錄在資料庫中,以便於後續可以關鍵字搜尋。
這整個機制,我們就可以透過 Azure Functions 來完成。
底下這個MS官方的影片,很清楚地介紹使用Azure function的好處:
你可以把 Azure Functions 想像成,有人幫你建立好了伺服器、網站、準備好了SDK、runtime,然後你只需要把執行特定功能的 WebAPI/Web Services程式碼寫好放上去,就可以開始運行了。
撰寫方式
具體 Azure Functions 支援的語言包含:
- C#
- Java/JavaScript
- Python
- TypeScript
- PowerShell Script
- …越來越多…
開發人員可以透過 Azure Portal來撰寫,或是透過開發工具(像是Visual Studio, VS Code)撰寫完之後,佈署上雲端來執行。
在雲端建立第一個Function
要使用 Azure Function,得先建立 Function App服務,中文版稱為"函數應用程式"。
您可參考底下影片建立一個 Function App:
接著,透過 azure portal ,你可以直接建立一個 Function 並且在其中撰寫程式碼。底下這段影片,展示如何建立一個Function App,並且監聽 azure storage中的 blob container,若其中有檔案上傳,則取得檔案名稱,填入queue:
影片13秒的地方,你會看到連結 blob trigger,意味著,可以透過blob檔案上傳,觸發這個function,這是input binding。
影片42秒,你看到的是我們透過binding,連結一個已經建立好的名為container1的容器,當用戶把檔案上傳到這個容器中,就會觸發funcion。
59秒處,是建立這個容器的storage account連結。
1’42秒開始,是建立輸出的queue,當用戶有檔案上傳,該function就會寫入一則記錄到queue當中。
1:35秒處,請注意建立的queue名稱,該名稱必須和待會綁定於azure function中的名稱相同。
最後, 2:14秒開始,則是撰寫該function的程式碼,請看程式碼本身,你會發現blob和queue相關資訊,都會從function 參數傳入,然後我們可以透過程式碼來控制其中的互動(底下的例子是把上傳的檔案名稱寫入queue):
public static void Run(Stream myBlob, string name, ICollector<string> outputQueueItem, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
outputQueueItem.Add("Name passed to the function: " + name);
}
實務上當然不是那麼簡單,這只是一個範例,看起來無用,但這個範例,展示了 Azure Function 可以連結到外部的 blob, queue…等儲存體,而不需要額外撰寫程式碼去維護連線。
本質上這是一個binding(繫結、綁定)機制,透過input binding與output binding就可以讓azure function以設定的方式,來連結外部資源,或是被特定事件(例如檔案上傳到blob)來觸發。
影片的3:11秒開始,則是展示上傳檔案後,會成功的有log,並且在queue當中留下一筆紀錄。
總的來說,使用azure function 帶來很多好處:
- 無須額外撰寫程式碼管理外部資源的連線,便於維護或管理。
- 透過binding設定即可將外部資訊以參入方式注入函式中,便於程式碼撰寫。
- 無須管理伺服器本身的架構或是runtime、SDK,這些都由雲端服務廠商來負責維護,開發人員可以專注在function 的開發上。
留言