Microsoft Azure Functions 是 Microsoft Azure 平臺上，提供無伺服器計算架構 Serverless Computing 的服務，允許開發人員在不用接觸與管理伺服器的情況下，編寫小型的處理程式以處理雲端上的訊息或事件。 Azure Functions 於微軟 Build 2016 大會上宣佈，於同年 11 月 15 日正式 GA General Availability。 Azure Functions 已廣泛於用如 Azure Bot Services、Azure IoT Suite、Azure Logic App 等服務串聯。 簡介 Azure Functions 是以 Azure Web App 開發時所建立的 Microsoft Azure Azure Web Jobs 為基礎所開發的一個服務，Web Jobs 在開發時就已經支援多語言 包含 Bash 批次檔，C nodejs PowerShell F Python 與 PHP 等 的執行環境，因此在發展 Azure Functions 時，也將 Web Jobs 的多語言能力移植到 Azure Functions，同時基於無伺服器的架構，Azure Functions 只要求開發人員在 Azure 的管理介面上撰寫程式碼，即可立即測試與執行，不必擔心背後的資源分配與伺服器管理的問題。 Azure Functions 在設計上以函式 function 會有的特性來規劃，一個函式本身會有輸入 input、處理 process 與輸出 output 三個部份，微軟將輸入和輸出進行抽象化的處理，以繫結 binding 來替代 。 輸入繫結 input binding 表示函式會於繫結指定的條件發生時觸發，並將條件所需的引數傳到函式作為輸入的引數 argument。 輸出繫結 output binding 表示函式會輸出成指定的格式，通常作為回傳值 return value。 Azure Functions 如同其他 Azure 應用服務 一般，執行於 App Service Plan 應用服務計畫 之上，不過為了要達到無伺服器架構的目標，Azure Functions 還多了一個使用模式，稱為消費計畫 Consumption Plan，以執行次數 Executions 和執行時的資源耗用量 Resource Consumption 為計費基礎 ，但使用者可選擇要用原始的 App Service Plan 還是要使用計量級的 Consumption Plan 作為計費單位。 功能 Azure Functions 基於無伺服器管理架構，因此其功能大多數都落在程式碼的開發、繫結的設定與安全金鑰的管理，當然也可以依需求進一步的設定其所處的 App Service Plan 即使是 Consumption Plan 也有 的進階設定，例如加上 SSL 或增修應用程式組態檔的設定等等。 程式碼管理 Azure Functions 允許開發人員直接編寫函式的程式碼，也就是處理 Process 這個部份，基於與函式的繫結的整合，微軟提供了數個樣板 template 給開發人員選用，每個支援的繫結都會有一個樣板，開發人員不需費心於思考如何在函式中使用繫結，只要在函式的本體中編寫處理的程式碼即可。 例如使用 HTTP 觸發 即送 HTTP 要求給該函式 的 C 程式碼如下： public static TaskHttpResponseMessage Run HttpRequestMessage request string category int id TraceWriter log if id null return reqCreateResponse HttpStatusCodeOK All category items were requested else return reqCreateResponse HttpStatusCodeOK category item with id id has been requested 而同樣功能的 nodejs 程式碼如下： moduleexports function context req var category contextbindingDatacategory var id contextbindingDataid if id contextres status 200 Defaults to 200 body All category items were requested else contextres status 200 Defaults to 200 body category item with id id was requested contextdone 範本會先為開發人員設定好引數，開發人員只要填入處理的程式即可。 另外，Azure Functions 也支援由 git 部署，然而若使用 git 部署時，Azure Portal 上的程式碼編輯器會強制停用。 繫結 繫結決定了函式的輸入、觸發時間與輸出，Azure Functions 支援了下列的觸發程式、輸入與輸出。由於觸發程式和輸入引數可以不同，因此下表中無輸入但有觸發支援時，觸發的引數會作為輸入的引數。 型別 觸發 輸入 輸出 排程 支援 設定的時間或週期到時 HTTP 支援 接到由 REST 或 WebHook 傳送的 HTTP 要求時 支援 Blob 支援 Azure Storage Blob 監控的容器有資料新增或更新時 支援 支援 事件 支援 EventHub 有事件進入時 支援 佇列 支援 Azure Storage Queue 佇列內有訊息時 支援 佇列和主題 支援 Azure Service Bus Queue 佇列或 Topic 主題內有訊息時 支援 儲存體資料表 支援 支援 SQL 資料表 支援 支援 NoSQL 資料庫 支援 支援 通知訊息 支援 Twilio SMS 服務 支援 SendGrid 支援 每個輸入、輸出繫結與觸發程式也會有必要的引數設定 例如排程需要設定執行週期、Blob 需要設定監控的儲存體帳戶與容器等等。 繫結的設定除了可在使用者介面上設定外，也可使用每個函式都有的 functionjson 檔案設定，例如下列設定表示了監控 blob 的輸入，如果有輸入就觸發函式，並且將函式的輸出指定為另一個 blob 的繫結。 bindings name image type blobTrigger path sampleimagesfilename direction in connection MyStorageConnection name imageSmall type blob path sampleimagessmfilename direction out connection MyStorageConnection 存取控制 使用 HTTP 繫結作為輸入的函式 通常用於 REST 與 WebHook，Azure Functions 會另外提供金鑰 Key 給開發人員使用，以作為存取控制的方法。 金鑰預設有兩種： 主機金鑰 master key：所有建於此應用程式內的所有函式都可使用。 函式金鑰 function key 只有金鑰所屬的函式可使用。 除了上面兩個預設的金鑰外，開發人員也可建立自己的金鑰，並決定存取許可權是限制於函式，還是要支援所有的函式。 開發人員支援 Azure Functions 除了提供 Azure Portal 上的程式碼編修，以及採用 git 的持續整合的程式碼管理方式外，也為開發人員在地端的作業提供了 Azure Function Runtime，以加速開發人員在地端的開發與測試。 Visual Studio Code 也有套件支援 Azure Functions 的開發。 參考 相關條目 AWS Lambda 外部連結 Introducing Azure Functions Azure Functions Overview CategoryMicrosoft Azure