Creación de desencadenadores y enlaces
Un desencadenador define cómo se invoca una función y cada función debe tener exactamente un desencadenador. Los desencadenadores tienen datos asociados, que a menudo son la carga de la función.
El enlace a una función es una manera de conectar otro recurso a la función mediante declaración. Los enlaces pueden estar conectados como enlaces de entrada, enlaces de salida o ambos. Los datos de los enlaces se proporcionan a la función como parámetros.
Puede mezclar y asignar enlaces diferentes para satisfacer sus necesidades. 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.
Al desarrollar las funciones localmente, debe tener en cuenta los comportamientos de desencadenador y enlace. En el caso de los desencadenadores HTTP, puede llamar al punto de conexión HTTP en el equipo local mediante http://localhost/. En el caso de las funciones desencadenadas sin HTTP, hay varias opciones para ejecutarse localmente:
- La manera más fácil de probar los enlaces durante el desarrollo local es usar cadenas de conexión destinadas a servicios de Azure activos. Puede dirigirse a servicios activos agregando la configuración de cadena de conexión adecuada en la
Valuesmatriz en el archivo local.settings.json. Al hacerlo, las ejecuciones locales durante las pruebas usan datos del servicio activo. Por este motivo, considere la posibilidad de configurar servicios independientes para usarlos durante el desarrollo y las pruebas y, luego, cambiar a servicios diferentes durante la producción. - En el caso de los desencadenadores basados en almacenamiento, puede usar el emulador de Azurite local al probar funciones con enlaces de Azure Storage (Queue Storage, Blob Storage y Table Storage), sin tener que conectarse a servicios de almacenamiento remoto.
- Puede ejecutar manualmente funciones de desencadenador que no son HTTP mediante puntos de conexión de administrador especiales. Para obtener más información, consulte Ejecución manual de una función no desencadenada por HTTP.
Definiciones de desencadenador y enlace
Los desencadenadores y enlaces se definen de forma diferente en función del lenguaje de desarrollo y el modelo en tiempo de ejecución.
| Idioma | Configure los desencadenadores y enlaces... |
|---|---|
| Biblioteca de clases de C# | decorando métodos y parámetros con atributos de C# (trabajo aislado o en proceso) |
| Java | la decoración de métodos y parámetros con anotaciones de Java |
| JavaScript/TypeScript | Modelo de programación v4: definir entradas y salidas en el código mediante @azure/functions; v3: configurar en un function.json por función |
| Pitón | Modelo de programación v2: definir entradas/salidas con decoradores; v1: configurar en function.json |
| PowerShell | configurar en function.json |
Nota:
En los modelos modernos (Node.js v4 y Python v2), se crea la configuración de desencadenador y enlace en el código y el entorno de ejecución genera el function.jsoncorrespondiente. Los modelos anteriores (Node.js v3, Python v1, PowerShell) usan function.json directamente. No se pueden mezclar modelos de programación dentro de la misma aplicación de funciones.
En el caso de los idiomas que se basan en function.json (por ejemplo, Node.js v3, Python v1 y PowerShell), el portal proporciona una interfaz de usuario para agregar enlaces en la pestaña Integración . También puede editar el archivo directamente en el portal en la pestaña Código y prueba de la función. Para los modelos de código primero, como Node.js v4 y Python v2, configure enlaces en el código del proyecto local; el portal refleja la configuración, pero es posible que no admita modificaciones directas.
En .NET y Java, el tipo de parámetro define el tipo de datos de entrada. Por ejemplo, use string para enlazar al texto de un desencadenador de cola, una matriz de bytes para leerla como binaria y un tipo personalizado para deserializar a un objeto. Dado que ni las funciones de la biblioteca de clases de .NET ni las funciones de Java utilizan function.json para las definiciones de enlace, no se pueden crear ni editar en el portal. La edición del portal en C# se basa en un script en C#, que usa function.json, en lugar de los atributos.
Para los lenguajes que se escriben dinámicamente, como JavaScript (mediante el modelo v3) o PowerShell, use la dataType propiedad en el archivo function.json . Por ejemplo, para leer el contenido de una solicitud HTTP en formato binario, establezca dataType en binary:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
Otras opciones para dataType son stream y string.
Dirección de los enlaces
Todos los desencadenadores y enlaces tienen una propiedad de dirección en el archivo function.json:
- En el caso de los desencadenadores, esta propiedad siempre aparece como
in - Los enlaces de entrada y de salida usan
inyout - Algunos enlaces admiten la dirección especial
inout. Si utilizainout, solo estará disponible la opción Editor avanzado mediante la pestaña Integrar en el portal.
Cuando se usan atributos en una biblioteca de clases para configurar los desencadenadores y los enlaces, la dirección se proporciona en un constructor de atributos o se deduce del tipo de parámetro.
Ejemplos de desencadenadores y vinculaciones de Azure Functions
Supongamos que quiere escribir un mensaje en Azure Queue Storage cada vez que se recibe una solicitud HTTP. Puede implementarlo con un desencadenador HTTP y un enlace de salida de cola de Storage. El enfoque de configuración depende del lenguaje y del modelo de programación.
Este es un archivo function.json heredado para este escenario (aplicable a Node.js v3, Python v1 o PowerShell).
{
"disabled": false,
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"name": "req",
"authLevel": "function",
"methods": ["get","post"]
},
{
"type": "queue",
"direction": "out",
"name": "outqueue",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
El primer elemento de la bindings matriz es el desencadenador HTTP. Las propiedades type y direction identifican el desencadenador. La name propiedad identifica el parámetro de función que recibe la solicitud HTTP y methods enumera los verbos HTTP admitidos.
El segundo elemento de la matriz bindings es el enlace de salida de la cola de Storage. Las propiedades type y direction identifican el enlace. La name propiedad especifica cómo la función proporciona el nuevo mensaje de cola, identifica queueName la cola y connection hace referencia a la configuración de la aplicación que contiene la cadena de conexión de almacenamiento.
Nota:
Deshabilitar una función a través de la disabled propiedad en function.json es un comportamiento heredado. Prefiere usar la configuración AzureWebJobs.<FunctionName>.Disabled=truede la aplicación .
Ejemplo de C# (trabajador aislado)
En este ejemplo se muestra una función activada por HTTP que escribe un mensaje en una cola de Storage mediante una asociación de salida definida por atributos. Para obtener más información, consulte Guía de trabajo aislado de C#.
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public static class HttpToQueue
{
[Function("HttpToQueue")]
public static MultiResponse Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
var message = "Processed request";
return new MultiResponse
{
Messages = new[] { message },
HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.OK)
};
}
}
public class MultiResponse
{
[QueueOutput("outqueue", Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
ejemplo de Node.js (modelo de programación v4)
En el modelo de programación v4 Node.js, configure entradas y salidas en el código mediante @azure/functions. Para obtener más información, consulte Node.js guía para desarrolladores (v4).
import { app, output } from "@azure/functions";
const queueOutput = output.storageQueue({
queueName: "outqueue",
connection: "AzureWebJobsStorage"
});
app.http("HttpToQueue", {
methods: ["GET", "POST"],
authLevel: "function",
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body || "Processed request");
return { status: 200, body: "Queued" };
}
});
Ejemplo de Python (modelo de programación v2)
En el modelo de programación de Python v2, se usan decoradores para definir enlaces. El tiempo de ejecución genera function.json automáticamente. Visite la guía para desarrolladores de Python para obtener más información.
import azure.functions as func
app = func.FunctionApp()
@app.route(route="HttpToQueue", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpToQueue(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:
body = req.get_body().decode("utf-8") if req.get_body() else "Processed request"
msg.set(body)
return func.HttpResponse("Queued", status_code=200)
Nota:
En Node.js v4 y Python v2, el entorno de ejecución genera function.json a partir del código. Evite editar function.json directamente en el portal para estos modelos; realice cambios en el código y vuelva a publicar.