Azure Functions 触发器和绑定概念

本文概要介绍有关函数触发器和绑定的概念。

触发器会导致函数运行。 触发器定义函数的调用方式,一个函数必须刚好有一个触发器。 触发器具有关联的数据,这些数据通常作为函数的有效负载提供。

绑定到函数是以声明方式将另一个资源连接到该函数的一种方式;绑定可以输入绑定和/或输出绑定的形式进行连接。 绑定中的数据作为参数提供给函数。

可根据需要,混合搭配不同的绑定。 绑定是可选的,一个函数可以有一个或多个输入绑定和/或输出绑定。

使用触发器和绑定可以避免对其他服务进行硬编码访问。 函数接收函数参数中的数据(例如,队列消息内容)。 使用函数的返回值发送数据(例如,用于创建队列消息)。

以下示例演示如何实现不同的函数。

示例方案 触发器 输入绑定 输出绑定
新的队列消息抵达,此时会运行一个函数来写入到另一个队列。 队列* 队列*
计划的作业读取 Blob 存储内容,并创建新的 Azure Cosmos DB 文档。 Timer Blob 存储 Azure Cosmos DB
事件网格用于读取 Blob 存储中的映像以及 Azure Cosmos DB 中的文档以发送电子邮件。 事件网格 Blob 存储和 Azure Cosmos DB SendGrid
一个 Webhook,它使用 Microsoft Graph 来更新 Excel 工作表。 HTTP Microsoft Graph

* 表示不同的队列

这些示例并不详尽,旨在演示如何同时使用触发器和绑定。

触发器和绑定的定义

触发器和绑定的定义根据开发语言的不同而异。

语言 触发器和绑定的配置方式...
C# 类库      使用 C# 特性修饰方法和参数
Java      使用 Java 注释修饰方法和参数
JavaScript/PowerShell/Python/TypeScript      更新 function.json架构

对于依赖 function.json 的语言,门户在“集成”选项卡中提供了用于添加绑定的 UI。还可以在门户中函数的“代码 + 测试”选项卡中直接编辑该文件。 使用 Visual Studio Code,可以通过一套方便的提示轻松地将绑定添加到 function.json 文件

在 .NET 和 Java 中,参数类型定义了输入数据的数据类型。 例如,使用 string 绑定到队列触发器的文本、一个要读取为二进制内容的字节数组,以及一个要反序列化为对象的自定义类型。 由于 .NET 类库函数和 Java 函数不依赖 function.json 来绑定定义,所以在门户中不能对它们进行创建和编辑。 C# 门户编辑基于C# 脚本,该脚本使用 function.json 而不是特性。

若要详细了解如何将绑定添加到现有函数,请参阅使用绑定将函数连接到 Azure 服务

对于动态键入的语言(如 JavaScript),请在 function.json 文件中使用 dataType 属性。 例如,若要以二进制格式读取 HTTP 请求的内容,将 dataType 设置为 binary

{
    "dataType": "binary",
    "type": "httpTrigger",
    "name": "req",
    "direction": "in"
}

dataType 的其他选项是 streamstring

绑定方向

所有触发器和绑定在 direction 文件中都有一个 direction 属性:

  • 对于触发器,方向始终为 in
  • 输入和输出绑定使用 inout
  • 某些绑定支持特殊方向 inout。 如果使用 inout,则只能通过门户中的“集成”选项卡使用“高级编辑器”。

使用类库中的特性来配置触发器和绑定时,方向在特性构造函数中提供或推断自参数类型。

向函数添加绑定

可以使用输入或输出绑定将函数连接到其他服务。 通过向函数添加绑定的具体定义来添加绑定。 若要了解如何操作,请参阅向 Azure Functions 中的现有函数添加绑定

支持的绑定

下表显示了 Azure Functions 运行时的主版本支持的绑定:

类型 1.x 2.x 及更高版本1 触发器 输入 输出
Blob 存储
Azure Cosmos DB
Azure SQL
Dapr3
事件网格
事件中心
HTTP 和 Webhook
IoT 中心
Kafka2
移动应用
通知中心
队列存储
RabbitMQ2
SendGrid
服务总线
SignalR
表存储
计时器

1 从版本 2.x 运行时开始,除了 HTTP 和 Timer 以外,所有绑定都必须注册。 请参阅注册绑定扩展

2 消耗计划中不支持触发器。 需要运行时驱动的触发器

3 仅支持 Kubernetes、IoT Edge 和其他自托管模式。

有关哪些绑定处于预览状态或已批准在生产环境中使用的信息,请参阅支持的语言

仅在支持基础服务 SDK 时,才支持特定绑定扩展版本。 基础服务 SDK 版本中对支持的更改会影响对使用扩展的支持。

绑定代码示例

使用下表查找特定绑定类型的示例,这些示例演示如何在函数中使用绑定。 首先,选择与你的项目相对应的语言选项卡。

服务 示例 示例
Blob 存储 触发器
输入
输出
链接
Azure Cosmos DB 触发器
输入
输出
链接
Azure SQL 触发器(预览)
输入
输出
链接
事件网格 触发器
输出
链接
事件中心 触发器
输出
IoT 中心 触发器
输出
HTTP 触发器 链接
队列存储 触发器
输出
链接
RabbitMQ 触发器
输出
SendGrid 输出
服务总线 触发器
输出
链接
SignalR 触发器
输入
输出
表存储 输入
输出
计时器 触发器 链接

自定义绑定

可以创建自定义输入和输出绑定。 绑定必须以 .NET 编写,但可以在任何支持的语言中使用。 有关创建自定义绑定的详细信息,请参阅创建自定义输入和输出绑定

资源

后续步骤