共用方式為

Azure Functions 触发器和绑定

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

触发器会导致函数运行。 触发器定义如何调用函数,并且函数必须只有一个触发器。 触发器还可以将数据传入函数,就像使用方法调用一样。

绑定到函数是一种以声明方式将函数连接到其他资源的方法。 绑定将数据传入函数(输入绑定),或者允许使用绑定参数将数据从函数(输出绑定)中写出。 函数触发器本质上是一种特殊的输入绑定类型。

可以混合和匹配绑定,以适应函数的特定方案。 绑定是可选的,一个函数可能具有一个或多个输入和/或输出绑定。

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

请考虑以下示例,了解如何实现函数:

示例方案 触发器 输入绑定 输出绑定
新的队列消息到达,该消息运行函数以写入另一个队列。 队列* 没有 队列*
计划作业读取 Azure Blob 存储内容并创建新的 Azure Cosmos DB 文档。 定时器 Blob 存储 Azure Cosmos DB
Azure 事件网格用于从 Blob 存储读取映像,以及 Azure Cosmos DB 中的文档以发送电子邮件。 事件网格 Blob 存储和 Azure Cosmos DB SendGrid

* 表示不同的队列。

这些示例并非详尽无遗,但它们说明了如何将触发器和绑定一起使用。 有关更全面的方案集,请参阅 Azure Functions 方案

提示

Azure Functions 不需要使用输入和输出绑定连接到 Azure 服务。 始终可以在代码中创建 Azure SDK 客户端,并将其用于数据传输。 有关详细信息,请参阅 “连接到服务”。

触发器和绑定的定义

以下示例显示了一个 HTTP 触发的函数,其中包含将消息写入 Azure 存储队列的输出绑定。

对于 C# 类库函数,可以通过使用 C# 属性修饰方法和参数来配置触发器和绑定。 应用的特定属性可能取决于 C# 运行时模型:

HTTP 触发器 (HttpTrigger) 是在 Run 方法上为返回 HttpExample 对象的名为 MultiResponse 的函数定义的:

        [Function("HttpExample")]
        public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
            FunctionContext executionContext)
        {

此示例显示 MultiResponse 对象定义。 对象定义返回 HttpResponse HTTP 请求,并使用 QueueOutput 绑定将消息写入存储队列:

    public class MultiResponse
    {
        [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
        public string[] Messages { get; set; }
        public HttpResponseData HttpResponse { get; set; }
    }

有关详细信息,请参阅 独立辅助角色模型的 C# 指南

旧 C# 脚本函数使用 function.json 定义文件。 有关详细信息,请参阅 Azure Functions C# 脚本 (.csx) 开发人员参考

对于 Java 函数,可以通过批注特定方法和参数来配置触发器和绑定。 此 HTTP 触发器 () 在名为 > 的函数的方法上定义。 该函数写入注释在参数上message定义的存储队列@QueueOutput

    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
            HttpRequestMessage<Optional<String>> request, 
            @QueueOutput(name = "msg", queueName = "outqueue", 
            connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

有关详细信息,请参阅 Java 开发人员指南

为 Node.js 函数定义触发器和绑定的方式取决于 Azure Functions 的特定 Node.js 版本:

在 Azure Functions 版本 4 的 Node.js 中,可以使用从 @azure/functions 模块导出的对象来配置触发器和绑定。 有关详细信息,请参阅 Node.js 开发人员指南

http导出app对象上的方法定义 HTTP 触发器。 output该方法storageQueue定义此触发器上的输出绑定。

const { app, output } = require('@azure/functions');

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: async (request, context) => {
        const body = await request.text();
        context.extraOutputs.set(queueOutput, body);
        return { body: 'Created queue item.' };
    },
});

http导出app对象上的方法定义 HTTP 触发器。 output该方法storageQueue定义此触发器上的输出绑定。

import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const body = await request.text();
    context.extraOutputs.set(queueOutput, body);
    return { body: 'Created queue item.' };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: httpTrigger1,
});

此示例 function.json 文件会定义函数:

    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

有关详细信息,请参阅 PowerShell 开发人员指南

定义函数的方式取决于适用于 Azure Functions 的 Python 版本:

在 Python for Azure Functions 版本 2 中,使用修饰器直接在代码中定义函数:

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

绑定注意事项

将绑定添加到函数的任务

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

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 和计时器之外的所有绑定都必须注册。 请参阅 “注册绑定扩展”。

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

3 仅在 Kubernetes、IoT Edge 和其他自承载模式下受支持。

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

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

绑定的代码示例

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

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

自定义绑定

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