Ejemplo de desencadenador y enlace de Azure FunctionsAzure Functions trigger and binding example

En este artículo se muestra cómo configurar un desencadenador y enlaces en una instancia de Azure Functions.This article demonstrates how to configure a trigger and bindings in an Azure Function.

Supongamos que quiere escribir una fila nueva en Azure Table Storage cada vez que aparezca un nuevo mensaje en Azure Queue Storage.Suppose you want to write a new row to Azure Table storage whenever a new message appears in Azure Queue storage. Este escenario puede implementarse mediante un desencadenador de Azure Queue Storage y un enlace de salida de Azure Table Storage.This scenario can be implemented using an Azure Queue storage trigger and an Azure Table storage output binding.

Este es un archivo function.json para este escenario.Here's a function.json file for this scenario.

{
  "bindings": [
    {
      "type": "queueTrigger",
      "direction": "in",
      "name": "order",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "type": "table",
      "direction": "out",
      "name": "$return",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

El primer elemento de la matriz bindings es el desencadenador de Queue Storage.The first element in the bindings array is the Queue storage trigger. Las propiedades type y direction identifican el desencadenador.The type and direction properties identify the trigger. La propiedad name identifica el parámetro de función que va a recibir el contenido del mensaje de cola.The name property identifies the function parameter that receives the queue message content. El nombre de la cola que supervisar está en queueName y la cadena de conexión, en la configuración de la aplicación identificada por connection.The name of the queue to monitor is in queueName, and the connection string is in the app setting identified by connection.

El segundo elemento de la matriz bindings es el enlace de salida de Azure Table Storage.The second element in the bindings array is the Azure Table Storage output binding. Las propiedades type y direction identifican el enlace.The type and direction properties identify the binding. La propiedad name especifica cómo la función proporcionará la nueva fila de tabla, en este caso, con el valor devuelto de función.The name property specifies how the function provides the new table row, in this case by using the function return value. El nombre de la tabla está en tableName y la cadena de conexión, en la configuración de la aplicación identificada por connection.The name of the table is in tableName, and the connection string is in the app setting identified by connection.

Para ver y editar el contenido de function.json en el portal de Azure, haga clic en la opción Editor avanzado en la pestaña Integrar de la función.To view and edit the contents of function.json in the Azure portal, click the Advanced editor option on the Integrate tab of your function.

Nota

El valor de connection es el nombre de una configuración de aplicación que contiene la cadena de conexión, no la propia cadena de conexión.The value of connection is the name of an app setting that contains the connection string, not the connection string itself. Los enlaces utilizan las cadenas de conexión almacenadas en la configuración de la aplicación para que function.json no contenga secretos de los servicios (procedimiento recomendado).Bindings use connection strings stored in app settings to enforce the best practice that function.json does not contain service secrets.

Ejemplo de script de C#C# script example

Este es el código de script de C# que funciona con este enlace y este desencadenador.Here's C# script code that works with this trigger and binding. Tenga en cuenta que el nombre del parámetro que proporciona el contenido del mensaje de cola es order; este nombre es necesario porque el valor de propiedad namede function.json es order.Notice that the name of the parameter that provides the queue message content is order; this name is required because the name property value in function.json is order

#r "Newtonsoft.Json"

using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;

// From an incoming queue message that is a JSON object, add fields and write to Table storage
// The method return value creates a new row in Table Storage
public static Person Run(JObject order, ILogger log)
{
    return new Person() { 
            PartitionKey = "Orders", 
            RowKey = Guid.NewGuid().ToString(),  
            Name = order["Name"].ToString(),
            MobileNumber = order["MobileNumber"].ToString() };  
}
 
public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

Ejemplo de JavaScriptJavaScript example

El mismo archivo function.json puede utilizarse con una función de JavaScript:The same function.json file can be used with a JavaScript function:

// From an incoming queue message that is a JSON object, add fields and write to Table Storage
// The second parameter to context.done is used as the value for the new row
module.exports = function (context, order) {
    order.PartitionKey = "Orders";
    order.RowKey = generateRandomId(); 

    context.done(null, order);
};

function generateRandomId() {
    return Math.random().toString(36).substring(2, 15) +
        Math.random().toString(36).substring(2, 15);
}

Ejemplo de biblioteca de clasesClass library example

En una biblioteca de clases, los atributos proporcionan la misma información — de desencadenador y enlace (nombres de tabla y cola, cuentas de almacenamiento, parámetros de función de entrada y salida —), en lugar de un archivo function.json.In a class library, the same trigger and binding information — queue and table names, storage accounts, function parameters for input and output — is provided by attributes instead of a function.json file. Este es un ejemplo:Here's an example:

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

Ahora tiene una función en uso que se desencadena mediante Azure Queue y envía los datos a Azure Table Storage.You now have a working function that is triggered by an Azure Queue and outputs data to Azure Table storage.

Pasos siguientesNext steps