Compartir vía


Conceptos básicos sobre los enlaces y desencadenadores de Azure Functions

En este artículo obtendrá información sobre los conceptos de alto nivel que rodean los enlaces y desencadenadores de Azure Functions.

Los desencadenadores provocan la ejecución de una función. Un desencadenador define cómo se invoca una función y cada función debe tener exactamente un desencadenador. Los desencadenadores también pueden pasar datos a la función, como lo haría con las llamadas al método.

El enlace a una función es una forma de conectar las funciones mediante declaración a otros recursos; los enlaces pasan datos a la función (un enlace de entrada ) o permiten escribir datos desde la función (un enlace de salida) mediante parámetros de enlace. El desencadenador de función es básicamente un tipo especial de enlace de entrada.

Puede combinar y hacer coincidir diferentes enlaces para adaptarse al escenario específico de la función. Los enlaces son opcionales y cada función puede tener uno o varios enlaces de entrada y de salida.

Los desencadenadores y enlaces evitan codificar el acceso a otros servicios. La función recibe los datos (por ejemplo, el contenido de un mensaje de cola) en parámetros de función. El usuario envía datos (por ejemplo, para crear un mensaje de la cola) mediante el valor devuelto de la función.

Tenga en cuenta los siguientes ejemplos de cómo se pueden implementar las distintas funciones.

Escenario de ejemplo Desencadenador Enlace de entrada Enlace de salida
Llega un nuevo mensaje de cola que ejecuta una función para escribir en otra cola. Cola* None Cola*
Un trabajo programado lee los contenidos de Blob Storage y crea un nuevo documento de Azure Cosmos DB. Timer Blob Storage Azure Cosmos DB
Event Grid se utiliza para leer una imagen en Blob Storage y un documento de Azure Cosmos DB con el fin de enviar un correo electrónico. Event Grid Blob Storage y Azure Cosmos DB SendGrid

* Representa diferentes colas

Estos ejemplos no pretenden ser exhaustivos, pero sirven para ilustrar cómo se pueden utilizar desencadenadores y enlaces de forma conjunta. Para obtener un conjunto más completo de escenarios, consulte Escenarios de Azure Functions.

Sugerencia

Functions no requiere que use enlaces de entrada y salida para conectarse a los servicios de Azure. Siempre puede crear un cliente del SDK de Azure en el código y usarlo en su lugar para las transferencias de datos. Para obtener más información, consulte Conexión a servicios.

Definiciones de desencadenador y enlace

Una función tiene un único desencadenador y uno o varios enlaces. El tipo de enlace es de entrada o salida. No todos los servicios admiten enlaces de entrada y salida. Consulte su extensión de enlace específica para ver ejemplos de código de enlace específicos.

Los desencadenadores y enlaces se definen de forma diferente en función del lenguaje de desarrollo. Asegúrese de seleccionar el idioma en la parte superior del artículo.

En este ejemplo se muestra una función desencadenada por HTTP con un enlace de salida que escribe un mensaje en una cola de Azure Storage.

En el caso de las funciones de la biblioteca de clases de C#, los desencadenadores y los enlaces se configuran mediante la decoración de métodos y parámetros con atributos de C#, donde el atributo específico aplicado puede depender del modelo en runtime de C#:

El desencadenador HTTP (HttpTrigger) se define en el método Run para una función denominada HttpExample que devuelve un objeto MultiResponse:

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

En este ejemplo se muestra la definición del objeto MultiResponse que devuelve un HttpResponse a la solicitud HTTP y también escribe un mensaje en una cola de almacenamiento mediante un enlace de QueueOutput:

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

Para obtener más información, consulte la guía del modelo de trabajo aislado de C#.

Las funciones heredadas de script de C# usan un archivo de definición function.json. Para más información, consulte la Referencia para desarrolladores de scripts de C# de Azure Functions (.csx).

Para las funciones de Java, los desencadenadores y los enlaces se configuran anotando métodos y parámetros específicos. Este desencadenador HTTP (@HttpTrigger) se define en el método run para una función denominada HttpTriggerQueueOutput, que escribe en una cola de almacenamiento definida por la anotación @QueueOutput en el parámetro message:

@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.");

Para más información, consulte la Guía para desarrolladores de Java.

La forma en que se definen los desencadenadores y el enlace para las funciones de Node.js depende de la versión específica de Node.js para Functions:

En Node.js para la versión 4 de Functions, configurará desencadenadores y enlaces mediante objetos exportados desde el módulo @azure/functions. Para más información, vea la Guía para desarrolladores de Node.js.

Este ejemplo es una función desencadenada por HTTP que crea un elemento de cola para cada solicitud HTTP recibida.

El método http del objeto app exportado define un desencadenador HTTP y el método storageQueue en output define un enlace de salida en este desencadenador.

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.' };
    },
});

El método http del objeto app exportado define un desencadenador HTTP y el método storageQueue en output define un enlace de salida en este desencadenador.

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,
});

Este archivo function.json de ejemplo define la función:

    {
      "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"
    }
  ]
}

Para más información, consulte la Guía para desarrolladores de PowerShell.

La forma en que se define la función depende de la versión de Python para Functions:

En Python para Functions versión 2, se define la función directamente en el código mediante decoradores.

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.')

Incorporación de enlaces a una función

Puede conectar la función a otros servicios mediante enlaces de entrada o salida. Para incorporar un enlace, agregue sus definiciones específicas a la función. Para obtener información sobre cómo hacerlo, vea Incorporación de enlaces a una función existente de Azure Functions.

Azure Functions admite varios enlaces, que deben configurarse correctamente. Por ejemplo, una función puede leer datos de una cola (enlace de entrada) y escribir datos en una base de datos (enlace de salida) simultáneamente.

Enlaces admitidos

En esta tabla se muestran los enlaces que son compatibles con las versiones principales del entorno en tiempo de ejecución de Azure Functions:

Tipo 1.x1 2.x y versiones posteriores2 Desencadenador Entrada Output
Blob Storage
Azure Cosmos DB
Azure Data Explorer
SQL de Azure
Dapr4
Event Grid
Event Hubs
HTTP y webhooks
IoT Hub
Kafka3
Mobile Apps
Centros de notificaciones
Queue Storage
Redis
RabbitMQ3
SendGrid
Service Bus
SignalR
Table storage
Temporizador
Twilio

Notas:

  1. La compatibilidad con la versión 1.x del entorno de ejecución de Azure Functions finalizará el 14 de septiembre de 2026. Se recomienda encarecidamente migrar las aplicaciones a la versión 4.x para obtener soporte completo.
  2. A partir del entorno de ejecución de la versión 2.x, se deben registrar todos los enlaces excepto HTTP y Timer. Consulte Registro de extensiones de enlace.
  3. Los desencadenadores no se admiten en el plan de consumo. Requiere desencadenadores controlados por el runtime.
  4. Solo se admite en Kubernetes, IoT Edge y otros modos autohospedados.

Para información sobre qué enlaces están en versión preliminar o aprobados para su uso en producción, consulte los lenguajes admitidos.

Las versiones de extensión de enlace específicas solo se admiten mientras se admite el SDK del servicio subyacente. Los cambios en la compatibilidad con la versión del SDK del servicio subyacente afectan a la compatibilidad con la extensión de consumo.

Ejemplos de código de enlaces

Use la tabla siguiente para buscar más ejemplos de tipos de enlaces específicos que muestren cómo trabajar con enlaces en las funciones. En primer lugar, elija la pestaña de lenguaje que corresponde al proyecto.

El código de enlace para C# depende del modelo de proceso específico.

Servicio Ejemplos Ejemplos
Blob Storage Desencadenador
Entrada
Salida
Vínculo
Azure Cosmos DB Desencadenador
Entrada
Salida
Vínculo
Explorador de datos de Azure Entrada
Salida
Vínculo
Azure SQL Desencadenador
Entrada
Salida
Vínculo
Event Grid Desencadenador
Salida
Vínculo
Event Hubs Desencadenador
Salida
IoT Hub Desencadenador
Salida
HTTP Desencadenador Vínculo
Queue Storage Desencadenador
Salida
Vínculo
RabbitMQ Desencadenador
Salida
SendGrid Salida
Azure Service Bus Desencadenador
Salida
Vínculo
SignalR Desencadenador
Entrada
Salida
Almacenamiento de tablas Entrada
Salida
Temporizador Desencadenador Vínculo
Twilio Salida Vínculo
Servicio Ejemplos Ejemplos
Blob Storage Desencadenador
Entrada
Salida
Vínculo
Azure Cosmos DB Desencadenador
Entrada
Salida
Vínculo
Explorador de datos de Azure Entrada
Salida
Vínculo
Azure SQL Desencadenador
Entrada
Salida
Event Grid Desencadenador
Salida
Vínculo
Event Hubs Desencadenador
Salida
IoT Hub Desencadenador
Salida
HTTP Desencadenador Vínculo
Queue Storage Desencadenador
Salida
Vínculo
RabbitMQ Desencadenador
Salida
SendGrid Salida
Azure Service Bus Desencadenador
Salida
Vínculo
SignalR Desencadenador
Entrada
Salida
Almacenamiento de tablas Entrada
Salida
Temporizador Desencadenador Vínculo
Twilio Salida Vínculo
Servicio Ejemplos Ejemplos
Blob Storage Desencadenador
Entrada
Salida
Vínculo
Azure Cosmos DB Desencadenador
Entrada
Salida
Vínculo
Explorador de datos de Azure Entrada
Salida
Azure SQL Desencadenador
Entrada
Salida
Vínculo
Event Grid Desencadenador
Salida
Vínculo
Event Hubs Desencadenador
Salida
IoT Hub Desencadenador
Salida
HTTP Desencadenador Vínculo
Queue Storage Desencadenador
Salida
Vínculo
RabbitMQ Desencadenador
Salida
SendGrid Salida
Azure Service Bus Desencadenador
Salida
Vínculo
SignalR Desencadenador
Entrada
Salida
Almacenamiento de tablas Entrada
Salida
Temporizador Desencadenador Vínculo
Twilio Salida Vínculo

El código de enlace para Python dependerá de la versión del modelo de Python.

Servicio Ejemplos Ejemplos
Blob Storage Desencadenador
Entrada
Salida
Vínculo
Azure Cosmos DB Desencadenador
Entrada
Salida
Vínculo
Explorador de datos de Azure Entrada
Salida
Azure SQL Desencadenador
Entrada
Salida
Vínculo
Event Grid Desencadenador
Salida
Vínculo
Event Hubs Desencadenador
Salida
IoT Hub Desencadenador
Salida
HTTP Desencadenador Vínculo
Queue Storage Desencadenador
Salida
Vínculo
RabbitMQ Desencadenador
Salida
SendGrid Salida
Azure Service Bus Desencadenador
Salida
Vínculo
SignalR Desencadenador
Entrada
Salida
Almacenamiento de tablas Entrada
Salida
Temporizador Desencadenador Vínculo
Twilio Salida Vínculo

Enlaces personalizados

Puede crear enlaces de entrada y salida personalizados. Los enlaces se deben crear en .NET, pero se pueden consumir en cualquier lenguaje admitido. Para más información sobre la creación de enlaces personalizados, vea Creación de enlaces de entrada y salida personalizados.