Azure Functions 是一種無伺服器解決方案,其運行的應用程式被稱為 Function App,可讓您編寫較少的程式碼、維護更少的基礎架構並節省成本。Function App 最常用來回應事件,如資料庫變更、IoT 資料流、訊息佇列等。
Azure Functions 相較於其他解決方案有兩項特點:
支援的功能有:
在構建 Function 時,您可以使用以下選項和資源:
透過命令列開發:
安裝完畢後請確認 az
和 func
指令可以被正常執行,如果失敗請重新安裝或手動將 az
和 func
的目錄加入環境變數。
檢查各項工具的版本是否夠新:
執行 func init
命令,在 FunctionApp 的資料夾中建立 .NET 的 Azure Functions 專案:
FunctionApp 包含專案的設定檔,其中 local.settings.json
可能會包含從 Azure 下載的機密資訊,因此必須將其加入 .gitignore
。
將 Function 新增至專案,其中 HttpExample
是 Function 的名稱,而 HTTP trigger
為方法的觸發方式。
執行完上述指令後會自動產生一份 HttpExample.cs
,這就是 Azure Functions 的主程式。
先在本機執行以下指令啟動 HttpExample
:
接下來連線至 http://localhost:7071/api/HttpExample
可以看到以下畫面:
把網址替換為 http://localhost:7071/api/HttpExample?name=xxxx
此範例為 HTTP triggers and bindings 程式,用於回應使用者給的 Http Request。
基於 C# 的 Functions 又分為 in-process、isolated process、Script (.csx) 三種模式,此範例單純使用 in-process 來開發,不會詳細討論其他模式。
host.json 中的設定值適用於 Azure Functions 實例中的所有函數。
[FunctionName("HttpExample")]
定義此 Function 的名稱為 HttpExample
,這個名稱與類別名稱或檔名無關,可以自由定義。每個要編譯成 Function 的方法 (如範例中的 Run
) 都必須要有這個 Attribute,否則 func
在編譯時就不會產生這個 Function 的 Route。[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req
用來綁定 Http 觸發器的規則,詳見 Azure Functions HTTP trigger#Attributes。Route
參數為 null
,所以預設會將 /api/{FunctionName}
路徑綁定到 HttpExample
,即 https://localhost:7071/api/HttpExample
。name
的鍵值,再以 json 格式解析 Request Body 是否有 name
的鍵值,然後產生 Hello, {name}...
字串。OkObjectResult
繼承自 Microsoft.AspNetCore.Mvc.ObjectResult
,如果回應成功,將產生一個 Status 200 OK。登入 Azure 帳戶:
新增一個 Resource Group:
--name
: Resource Group 名稱。--location
: 指定 Resource Group 的區域。可以用 az account list-locations
查看可用區域代碼。在 Resource Group 中創建 general-purpose Storage Account:
--name
: Storage Account 名稱。--location
: 指定 Storage Account 的區域。--resource-group
: Resource Group 名稱。--sku
: 選擇 Azure 的定價單位。在 Azure 中創建 Function App:
--resource-group
: Resource Group 名稱。--consumption-plan-location
: Function App 布署的地理位置。可以用 az functionapp list-consumption-locations
查看可用位置。--runtime
: 指定 runtime stack。--functions-version
: Function App 的版本,目前可接受的版本為 2
、3
、4
。--name
: Function App 在 Azure 上的名稱,布署後透過 https://{name}.azurewebsites.net
來連上 Function App。--storage-account
: 此 Resource Group 中的 Storage Account 的字串值。若要用別的 Resource Group 的 Storage Account,則是用 Resource ID。透過以下指令布署,其中 jacklin-function
為前面步驟中建立的 Azure Function App 的名稱;--force
略過布署前的檢查。
接下來連線到以下網址確認 Function App 是否成功執行。
https://jacklin-function.azurewebsites.net/api/httpexample
將 HttpExample.cs 改寫如下:
MyProduct
。products/{category:alpha}/{id:int?}
,並且綁定網址與 MyProductRun
參數欄位中的 category
和 id
。啟動 Function App:
除了原先的 http://localhost:7071/api/HttpExample?name=xxxx 之外,還有一個新的 Function http://localhost:7071/api/products/xxxx/1 ,你可以嘗試把 xxxx
和 1
替換為其他值。