Enlaces de salida de Azure Queue Storage para Azure Functions

Azure Functions puede crear nuevos mensajes de Azure Queue Storage mediante la configuración de un enlace de salida.

Para obtener información sobre los detalles de instalación y configuración, vea la información general.

Ejemplo

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

Atributos y anotaciones

En las bibliotecas de clase C#, use QueueAttribute.

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:

[FunctionName("QueueOutput")]
[return: Queue("myqueue-items")]
public static string Run([HttpTrigger] dynamic input,  ILogger log)
{
    ...
}

Puede establecer la propiedad Connection para especificar la cuenta de almacenamiento que se usará, tal como se muestra en el ejemplo siguiente:

[FunctionName("QueueOutput")]
[return: Queue("myqueue-items", Connection = "StorageConnectionAppSetting")]
public static string Run([HttpTrigger] dynamic input,  ILogger log)
{
    ...
}

Para obtener un ejemplo completo, vea el ejemplo de salida.

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.

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.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.

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:

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.

Cadena de conexión

Para obtener una cadena de conexión, siga los pasos mostrados en Administración de las claves de acceso de la cuenta de almacenamiento.

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. https://<storage_account_name>.queue.core.windows.net

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.

Se pueden establecer propiedades adicionales para personalizar la conexión. Consulte Propiedades comunes para conexiones basadas en identidades.

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]

Uso

Valor predeterminado

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:

Si intenta enlazar a CloudQueueMessage y obtiene un mensaje de error, asegúrese de que tiene una referencia a la versión correcta del SDK de Storage.

En C# y script de C#, escriba varios mensajes de cola mediante uno de los siguientes tipos:

Tipos adicionales

Las aplicaciones que usan la versión 5.0.0 o posterior de la extensión de Azure Storage también pueden usar tipos de Azure SDK para .NET. En esta versión se elimina la compatibilidad con los tipos CloudQueue y CloudQueueMessage heredados en favor de los siguientes tipos:

Para obtener ejemplos de uso de estos tipos, consulte el repositorio de GitHub de la extensión.

Excepciones y códigos de retorno

Enlace Referencia
Cola Códigos de error de cola
Blob, tabla, cola Códigos de error de almacenamiento
Blob, tabla, cola Solución de problemas

Pasos siguientes