En el ejemplo siguiente se muestra una función de C# que crea un mensaje de cola para cada una de las solicitudes HTTP que se reciben.
[StorageAccount("MyStorageConnectionAppSetting")]
public static class QueueFunctions
{
[FunctionName("QueueOutput")]
[return: Queue("myqueue-items")]
public static string QueueOutput([HttpTrigger] dynamic input, ILogger log)
{
log.LogInformation($"C# function processed: {input.Text}");
return input.Text;
}
}
En el ejemplo siguiente se muestra un enlace de desencadenador HTTP de un archivo function.json y el código de script de C# (.csx) que usa el enlace. La función crea un elemento de cola con una carga del objeto CustomQueueMessage para cada una de las solicitudes HTTP recibidas.
En la sección de configuración se explican estas propiedades.
Este es el código de script de C# que crea un único mensaje de cola:
public class CustomQueueMessage
{
public string PersonName { get; set; }
public string Title { get; set; }
}
public static CustomQueueMessage Run(CustomQueueMessage input, ILogger log)
{
return input;
}
Puede enviar varios mensajes a la vez mediante el uso de un parámetro ICollector o IAsyncCollector. Este es el código de script de C# que envía varios mensajes, uno con los datos de la solicitud HTTP y otro con valores codificados de forma rígida:
En el ejemplo siguiente se muestra una función de Java que crea un mensaje de cola cuando una solicitud HTTP la desencadena.
@FunctionName("httpToQueue")
@QueueOutput(name = "item", queueName = "myqueue-items", connection = "MyStorageConnectionAppSetting")
public String pushToQueue(
@HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
final String message,
@HttpOutput(name = "response") final OutputBinding<String> result) {
result.setValue(message + " has been added.");
return message;
}
En la biblioteca en tiempo de ejecución de funciones de Java, utilice la anotación @QueueOutput en los parámetros cuyo valor se escribiría en Queue Storage. El tipo de parámetro debe ser OutputBinding<T>, donde T es cualquier tipo nativo de Java de un POJO.
En el ejemplo siguiente se muestra un enlace de desencadenador HTTP de un archivo function.json y una función de JavaScript que usa el enlace. La función crea un elemento de cola para cada una de las solicitudes HTTP recibidas.
Puede enviar varios mensajes a la vez mediante la definición de una matriz de mensajes para el enlace de salida myQueueItem. El código JavaScript envía dos mensajes de cola con valores codificados de forma rígida para cada una de las solicitudes HTTP recibidas.
En los siguientes ejemplos de código se muestra cómo generar un mensaje de la cola desde una función desencadenada por HTTP. La sección de configuración con el valor de type de queue define el enlace de salida.
Con esta configuración de enlace, una función de PowerShell puede crear un mensaje de cola mediante Push-OutputBinding. En este ejemplo, se crea un mensaje a partir de una cadena de consulta o un parámetro de cuerpo.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$message = $Request.Query.Message
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = 200
Body = "OK"
})
Para enviar varios mensajes a la vez, defina una matriz de mensajes y utilice Push-OutputBinding para enviar mensajes al enlace de salida de la cola.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$message = @("message1", "message2")
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = 200
Body = "OK"
})
En el ejemplo siguiente se muestra cómo generar valores únicos y múltiples en las colas de almacenamiento. La configuración necesaria para function.json es la misma en cualquier caso.
Un enlace de cola de almacenamiento se define en function.json, donde type está establecido en queue.
Para crear varios mensajes en la cola, declare un parámetro como el tipo de lista adecuado y pase una matriz de valores (que coincidan con el tipo de lista) al método set.
El atributo se aplica a un parámetro out o al valor de retorno de la función. El constructor del atributo toma el nombre de la cola, tal como se muestra en el ejemplo siguiente:
Puede usar el atributo StorageAccount para especificar la cuenta de almacenamiento en el nivel de clase, método o parámetro. Para obtener más información, consulte Desencadenador: atributos.
El script de C# no admite atributos.
La anotación QueueOutput permite escribir un mensaje como la salida de una función. En el ejemplo siguiente se muestra una función desencadenada mediante HTTP que crea un mensaje de cola.
Declara el nombre del parámetro en la firma de la función. Cuando se desencadena la función, el valor de este parámetro tiene el contenido del mensaje de la cola.
queueName
Declara el nombre de la cola en la cuenta de almacenamiento.
connection
Apunta a la cadena de conexión de la cuenta de almacenamiento.
El parámetro asociado a la anotación QueueOutput tiene como tipo una instancia de OutputBinding<T>.
JavaScript no admite atributos.
PowerShell no admite atributos.
Python no admite atributos.
Configuración
En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Queue.
Propiedad de function.json
Propiedad de atributo
Descripción
type
N/D
Se debe establecer en queue. Esta propiedad se establece automáticamente cuando se crea el desencadenador en Azure Portal.
direction
N/D
Se debe establecer en out. Esta propiedad se establece automáticamente cuando se crea el desencadenador en Azure Portal.
name
N/D
Nombre de la variable que representa la cola en el código de la función. Se establece en $return para hacer referencia al valor devuelto de la función.
queueName
QueueName
Nombre de la cola.
connection
Connection
Nombre de una configuración de aplicación o colección de configuraciones que especifica cómo conectarse a las colas de Azure. Consulte Conexiones.
La propiedad connection es una referencia a la configuración del entorno que especifica cómo se debe conectar la aplicación a las colas de Azure. Puede especificar lo siguiente:
El nombre de una configuración de la aplicación que contiene una cadena de conexión.
El nombre de un prefijo compartido para varias configuraciones de la aplicación que juntas definen una conexión basada en identidad.
Si el valor configurado es tanto una coincidencia exacta de una única configuración como una coincidencia de prefijo de otras configuraciones, se usa la coincidencia exacta.
La cadena de conexión debe almacenarse en una configuración de la aplicación con un nombre que coincida con el valor especificado por la propiedad connection de la configuración de enlace.
Si el nombre de la configuración de aplicación comienza con "AzureWebJobs", puede especificar solo el resto del nombre aquí. Por ejemplo, si establece connection en "MyStorage", el entorno en tiempo de ejecución de Functions busca una configuración de aplicación denominada "AzureWebJobsMyStorage". Si deja connection vacía, el entorno en tiempo de ejecución de Functions usa la cadena de conexión de almacenamiento predeterminada en la configuración de aplicación que se denomina AzureWebJobsStorage.
Conexiones basadas en identidades
Si usa la versión 5.x o posterior de la extensión, en lugar de usar una cadena de conexión con un secreto, puede hacer que la aplicación use una identidad de Azure Active Directory. Para ello, definiría la configuración con un prefijo común que se asigne a la propiedad connection en la configuración de desencadenador y enlace.
En este modo, la extensión requiere las siguientes propiedades:
Propiedad
Plantilla de variable de entorno
Descripción
Valor de ejemplo
URI del servicio Queue
<CONNECTION_NAME_PREFIX>__queueServiceUri1
Uri del plano de datos del servicio de cola al que se conecta, mediante el esquema HTTPS.
1<CONNECTION_NAME_PREFIX>__serviceUri se puede usar como alias. Si se proporcionan ambos formularios, se usará el formulario queueServiceUri. El formulario serviceUri no se puede usar cuando la configuración de conexión general se va a usar en blobs, colas o tablas.
Cuando se hospeda en el servicio de Azure Functions, las conexiones basadas en identidades usan una identidad administrada. La identidad asignada por el sistema se usa de manera predeterminada, aunque se puede especificar una identidad asignada por el usuario con las propiedades credential y clientID. Cuando se ejecuta en otros contextos, como el de desarrollo local, se usa en su lugar la identidad del desarrollador, aunque se puede personalizar. Consulte Desarrollo local con conexiones basadas en identidades.
Concesión de permiso a la identidad
Cualquier identidad que se utilice debe tener permisos para realizar las acciones previstas. Deberá asignar un rol en Azure RBAC mediante roles integrados o personalizados que proporcionen esos permisos.
Importante
Es posible que el servicio de destino muestre algunos permisos que no son necesarios para todos los contextos. Siempre que sea posible, respete el principio de privilegios mínimos y conceda solo los privilegios necesarios a la identidad. Por ejemplo, si la aplicación solo necesita poder leer desde un origen de datos, use un rol que solo tenga permiso de lectura. Sería inadecuado asignar un rol que también permita escribir en ese servicio, ya que sería un permiso excesivo para una operación de lectura. De forma similar, le interesa asegurarse de que la asignación de roles esté limitada solo a los recursos que se deben leer.
Deberá crear una asignación de roles que proporcione acceso a la cola en tiempo de ejecución. Los roles de administración, como propietario no son suficientes. En la tabla siguiente se muestran los roles integrados que se recomiendan al usar la extensión Queue Storage en funcionamiento normal. Puede que la aplicación precise permisos adicionales en función del código que escriba.
Tipo de enlace
Roles integrados de ejemplo
Desencadenador
[Lector de datos de la cola de Storage Blob], [Procesador de mensajes de datos de Queue Storage]
Enlace de salida
[Colaborador de datos de la cola de Storage Blob], [Remitente de mensajes de datos de Queue Storage]
Escriba un mensaje de cola único mediante un parámetro de método como out T paramName. Puede usar el tipo de valor devuelto del método en lugar de un parámetro out, y T puede ser cualquiera de los siguientes tipos:
Escriba un mensaje de cola único mediante un parámetro de método como out T paramName. paramName es el valor especificado en la propiedad name de function.json. Puede usar el tipo de valor devuelto del método en lugar de un parámetro out, y T puede ser cualquiera de los siguientes tipos:
Hay dos opciones para generar un mensaje de cola desde una función mediante la anotación QueueOutput:
Valor devuelto: Al aplicar la anotación a la propia función, el valor devuelto de la función se conserva como un mensaje de cola.
Imperativa: Para establecer explícitamente el valor del mensaje, aplique la anotación a un parámetro específico del tipo OutputBinding<T>, donde T es un POJO o cualquier tipo de Java nativo. Con esta configuración, al pasar un valor al método setValue se conserva el valor como un mensaje de cola.
El elemento de la cola de salida está disponible mediante context.bindings.<NAME>, donde <NAME> coincide con el nombre definido en function.json. Puede usar una cadena o un objeto JSON serializable para la carga del elemento de cola.
La salida al mensaje de la cola está disponible a través de Push-OutputBinding, donde se pasan argumentos que coinciden con el nombre designado por el parámetro name del enlace en el archivo function.json.
Hay dos opciones para la generación de un mensaje de cola desde una función:
Valor devuelto: Establezca la propiedad name de function.json en $return. Con esta configuración, el valor devuelto de la función se conserva como un mensaje de Queue Storage.
Imperativa: Pase un valor al método set del parámetro declarado como tipo Out. El valor pasado a set se conserva como un mensaje de Queue Storage.