你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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
的其他选项是 stream
和 string
。
绑定方向
所有触发器和绑定在 direction
文件中都有一个 direction
属性:
- 对于触发器,方向始终为
in
- 输入和输出绑定使用
in
和out
- 某些绑定支持特殊方向
inout
。 如果使用inout
,则只能通过门户中的“集成”选项卡使用“高级编辑器”。
使用类库中的特性来配置触发器和绑定时,方向在特性构造函数中提供或推断自参数类型。
向函数添加绑定
可以使用输入或输出绑定将函数连接到其他服务。 通过向函数添加绑定的具体定义来添加绑定。 若要了解如何操作,请参阅向 Azure Functions 中的现有函数添加绑定。
支持的绑定
下表显示了 Azure Functions 运行时的主版本支持的绑定:
类型 | 1.x1 | 2.x 及更高版本2 | 触发器 | 输入 | 输出 |
---|---|---|---|---|---|
Blob 存储 | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure 数据资源管理器 | ✔ | ✔ | ✔ | ||
Azure SQL | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
事件网格 | ✔ | ✔ | ✔ | ✔ | |
事件中心 | ✔ | ✔ | ✔ | ✔ | |
HTTP 和 Webhook | ✔ | ✔ | ✔ | ✔ | |
IoT 中心 | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
移动应用 | ✔ | ✔ | ✔ | ||
通知中心 | ✔ | ✔ | |||
队列存储 | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
服务总线 | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
表存储 | ✔ | ✔ | ✔ | ✔ | |
计时器 | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
1对 Azure Functions 运行时版本 1.x 的支持将于 2026 年 9 月 14 日结束。 强烈建议将应用迁移到版本 4.x,以获得全面支持。
2 从 2.x 版运行时开始,除了 HTTP 和 Timer 以外,所有绑定都必须注册。 请参阅注册绑定扩展。
3 消耗计划中不支持触发器。 需要运行时驱动的触发器。
4 仅在 Kubernetes、IoT Edge 和其他自托管模式中受支持。
有关哪些绑定处于预览状态或已批准在生产环境中使用的信息,请参阅支持的语言。
仅在支持基础服务 SDK 时,才支持特定绑定扩展版本。 基础服务 SDK 版本中对支持的更改会影响对使用扩展的支持。
绑定代码示例
使用下表查找特定绑定类型的示例,这些示例演示如何在函数中使用绑定。 首先,选择与你的项目相对应的语言选项卡。
C# 的绑定代码取决于特定的进程模型。
服务 | 示例 | 示例 |
---|---|---|
Blob 存储 | 触发器 输入 输出 |
链接 |
Azure Cosmos DB | 触发器 输入 输出 |
链接 |
Azure 数据资源管理器 | 输入 输出 |
链接 |
Azure SQL | 触发器 输入 输出 |
|
事件网格 | 触发器 输出 |
链接 |
事件中心 | 触发器 输出 |
|
IoT 中心 | 触发器 输出 |
|
HTTP | 触发器 | 链接 |
队列存储 | 触发器 输出 |
链接 |
RabbitMQ | 触发器 输出 |
|
SendGrid | 输出 | |
服务总线 | 触发器 输出 |
链接 |
SignalR | 触发器 输入 输出 |
|
表存储 | 输入 输出 |
|
计时器 | 触发器 | 链接 |
Twilio | 输出 | 链接 |
服务 | 示例 | 示例 |
---|---|---|
Blob 存储 | 触发器 输入 输出 |
链接 |
Azure Cosmos DB | 触发器 输入 输出 |
链接 |
Azure 数据资源管理器 | 输入 输出 |
|
Azure SQL | 触发器 输入 输出 |
链接 |
事件网格 | 触发器 输出 |
链接 |
事件中心 | 触发器 输出 |
|
IoT 中心 | 触发器 输出 |
|
HTTP | 触发器 | 链接 |
队列存储 | 触发器 输出 |
链接 |
RabbitMQ | 触发器 输出 |
|
SendGrid | 输出 | |
服务总线 | 触发器 输出 |
链接 |
SignalR | 触发器 输入 输出 |
|
表存储 | 输入 输出 |
|
计时器 | 触发器 | 链接 |
Twilio | 输出 | 链接 |
服务 | 示例 | 示例 |
---|---|---|
Blob 存储 | 触发器 输入 输出 |
链接 |
Azure Cosmos DB | 触发器 输入 输出 |
链接 |
Azure SQL | 触发器 输入 输出 |
|
事件网格 | 触发器 输出 |
链接 |
事件中心 | 触发器 输出 |
|
IoT 中心 | 触发器 输出 |
|
HTTP | 触发器 | 链接 |
队列存储 | 触发器 输出 |
链接 |
RabbitMQ | 触发器 输出 |
|
SendGrid | 输出 | |
服务总线 | 触发器 输出 |
链接 |
SignalR | 触发器 输入 输出 |
|
表存储 | 输入 输出 |
|
计时器 | 触发器 | 链接 |
Twilio | 输出 | 链接 |
Python 的绑定代码取决于 Python 模型版本。
自定义绑定
可以创建自定义输入和输出绑定。 绑定必须以 .NET 编写,但可以在任何支持的语言中使用。 有关创建自定义绑定的详细信息,请参阅创建自定义输入和输出绑定。