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#, node.js, PowerShell, F#, Python 与 PHP 等) 的执行环境,因此在发展 Azure Functions 时,也将 Web Jobs 的多语言能力移植到 Azure Functions,同时基于无服务器的架构,Azure Functions 只要求开发人员在 Azure 的管理界面上撰写程式码,即可立即测试与执行,不必担心背后的资源分配与服务器管理的问题。
Azure Functions 在设计上以函数 (function) 会有的特性来规划,一个函数本身会有输入 (input)、处理 (process) 与输出 (output) 三个部分,微软将输入和输出进行抽象化的处理,以系结 (binding) 来替代 。
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 Task<HttpResponseMessage> Run(HttpRequestMessage request, string category, int? id, TraceWriter log) { if (id == null) return req.CreateResponse(HttpStatusCode.OK, $"All {category} items were requested."); else return req.CreateResponse(HttpStatusCode.OK, $"{category} item with id = {id} has been requested."); }