Azure Functions 开发人员指南

在 Azure Functions 中,特定函数共享一些核心技术概念和组件,不受所用语言或绑定限制。 跳转学习某个特定语言或绑定的详细信息之前,请务必通读此通用概述。

本文假定已阅读了 Azure Functions 概述且熟悉触发器、绑定和 JobHost 运行时间等 WebJobs SDK 概念。 Azure Functions 以 WebJobs SDK 为基础。

函数代码

函数是 Azure Functions 的基本概念。 使用所选语言编写函数代码,并将代码文件和配置文件保存在同一文件夹中。 配置的名称为 function.json,其中包含 JSON 配置数据。 支持各种语言,并且对每种语言进行了优化,使每种语言体验有些许不同,以达到最佳工作效果。

Function.json 文件定义函数绑定和其他配置设置。 运行时使用此文件确定要监视的事件,以及如何将数据传入函数执行和从函数执行返回数据。 下面是一个示例 function.json 文件。

{
    "disabled":false,
    "bindings":[
        // ... bindings here
        {
            "type": "bindingType",
            "direction": "in",
            "name": "myParamName",
            // ... more depending on binding
        }
    ]
}

disabled 属性设置为 true,阻止函数执行。

bindings 属性配置两个触发器和绑定。 每个绑定共享一些通用设置和一些特定于特定类型的绑定的设置。 每个绑定都需要以下设置:

属性 值/类型 注释
type 字符串 绑定类型。 例如,queueTrigger
direction 'in', 'out' 表示绑定是用于接收数据到函数中或是从函数发送数据。
name 字符串 将用于函数中绑定数据的名称。 对于 C#,它将是参数名称;对于 JavaScript,它是键/值列表中的键。

函数应用

函数应用在 Azure 中提供用于运行函数的执行上下文。 函数应用由一个或多个经 Azure 应用服务共同管理的独立函数组成。 函数应用中的所有函数共享相同的定价计划、连续部署和运行时版本。 将函数应用视为组织和共同管理函数的一种方法。

Note

从 Azure Functions 运行时的版本 2.x 开始,函数应用中的所有函数都必须使用相同的语言创作。

运行时

Azure Functions 运行时或脚本宿主是基础主机,可侦听事件、收集和发送数据,并最终运行代码。 WebJobs SDK 使用此相同的主机。

还有一个 Web 主机处理运行时的 HTTP 触发器请求。 拥有两个主机有助于将运行时与由 Web 主机管理的前端通信隔离开来。

文件夹结构

特定函数应用中所有函数的代码均位于根项目文件夹中,其中包含主机配置文件和一个或多个子文件夹。 每个子文件夹包含单独函数的代码,表示形式如下:

FunctionApp
 | - host.json
 | - Myfirstfunction
 | | - function.json
 | | - ...  
 | - mysecondfunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

在 2.x 版 Functions 运行时中,函数应用中的所有函数都必须使用相同的语言辅助角色。

host.json 文件包含一些特定于运行时的配置,位于函数应用的根文件夹中。 bin 文件夹包含函数应用所需的包和其他库文件。 查看函数应用项目的语言特定要求:

设置用于将函数部署到 Azure 中的函数应用的项目时,可以将此文件夹结构视为站点代码。 我们建议使用包部署将项目部署到 Azure 中的函数应用。

Note

确保将 host.json 文件和函数文件夹直接部署到 wwwroot 文件夹。 请勿在部署中包含 wwwroot 文件夹。 否则,最后将得到 wwwroot\wwwroot 文件夹。

如何更新函数应用文件

通过 Azure 门户中内置函数编辑器可更新 function.json 文件和函数代码文件。 要上传或更新其他文件,例如 package.json 或 project.json 或是依赖项,必须使用其他部署方法。

Function App 都建立在应用服务之上,因此所有可用于标准 Web 应用的部署选项也均可用于 Function App。 以下为可用的上传或更新函数应用文件的一些方法。

使用本地工具和发布

可以使用各种工具创作和发布函数应用,包括 Visual StudioVisual Studio CodeIntelliJEclipseAzure Functions Core Tools。 有关详细信息,请参阅在本地对 Azure Functions 进行编码和测试

并行执行

多个触发事件发生的速度超过了单线程函数运行的处理速度时,运行时可并行多次调用函数。 无论应用是在消耗量托管计划还是常规应用服务托管计划上运行,每个 Function App 实例都可能使用多个线程并行处理并发函数调用。 每个 Function App 实例中并发函数的最大调用数根据所用触发器类型以及 Function App 中其他函数所用资源而有所不同。

Functions 运行时版本控制

可使用 FUNCTIONS_EXTENSION_VERSION 应用设置配置 Functions 运行时的版本。 例如,值“~2”表示 Function App 将使用 2.x 作为其主版本。 Function Apps 在发布后,将升级到各自新的次要版本。 有关详细信息(包括如何查看函数应用的确切版本),请参阅如何针对 Azure Functions 运行时版本

存储库

Azure Functions 代码为开放源,位于 GitHub 存储库:

绑定

下面是所有受支持的绑定表。

下表显示了 Azure Functions 运行时的两个主要版本支持的绑定。

类型 1.x 2.x1 触发器 输入 输出
Blob 存储
Cosmos DB
事件中心
外部文件2
HTTP
Microsoft Graph
Excel 表
Microsoft Graph
OneDrive 文件
Microsoft Graph
Outlook 电子邮件
Microsoft Graph
事件
Microsoft Graph
身份验证令牌
移动应用
通知中心
队列存储
SendGrid
服务总线
表存储
计时器
Webhook

1 在 2.x 中,除了 HTTP 和 Timer 以外,所有绑定都必须注册。 请参阅注册绑定扩展

2 试验性 — 不受支持,将来可能被弃用。

对来自绑定的错误怀有疑问? 请查看 Azure Functions 绑定错误代码文档。

报告问题

项目 说明 链接
运行时 脚本主机、触发器和绑定及语言支持 提出问题
模板 创建模板的代码问题 提出问题
门户 用户界面或体验问题 提出问题

后续步骤

有关详细信息,请参阅以下资源: