Tutorial: introducción a los desencadenadores y enlaces de Azure Functions en Azure Redis
Este tutorial muestra cómo implementar desencadenadores básicos con Azure Functions y Azure Managed Redis (versión preliminar) o Azure Cache for Redis. Le guiará a través del uso de Visual Studio Code (VS Code) para escribir e implementar una función de Azure en C#.
En este tutorial aprenderá a:
- Configurar las herramientas necesarias.
- Configure y conéctese a una caché.
- Cree una función de Azure e implemente código en ella.
- Confirme el registro de desencadenadores.
Requisitos previos
- Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita.
- Visual Studio Code.
- Configurar una instancia de Azure Managed Redis (versión preliminar)
- Configurar una instancia de Azure Cache for Redis
Cree una nueva instancia de Azure Cache for Redis mediante Azure Portal o la herramienta de la CLI preferida. Este tutorial utiliza una instancia B1 equilibrada, que es un buen punto de partida. Asegúrese de seleccionar esta instancia cuando utilice la guía de inicio rápido para empezar.
La configuración predeterminada debería ser suficiente. En este tutorial se usa un punto de conexión público como demostración, pero se recomienda que use un punto de conexión privado para todo lo que esté en producción.
La creación de la memoria caché puede tardar unos minutos. Puede pasar a la sección siguiente mientras finaliza el proceso.
Configurar Visual Studio Code
Si aún no ha instalado la extensión de Azure Functions para VS Code, busque Azure Functions en el menú EXTENSIONES y seleccione Instalar. Si no tuviera instalada la extensión de C#, instálela también.
Vaya a la pestaña Azure. Inicie sesión con su cuenta de Azure.
Para almacenar el proyecto que está compilando, cree una nueva carpeta local en el equipo. En este tutorial se usa RedisAzureFunctionDemo como ejemplo.
En la pestaña Azure, cree una nueva aplicación de funciones seleccionando el icono de rayo de la esquina superior derecha de la pestaña Área de trabajo.
Seleccione Crear función....
Seleccione la carpeta que creó para iniciar la creación de un nuevo proyecto de Azure Functions. Recibirá varios mensajes en pantalla. Seleccione:
- C# como lenguaje.
- .NET 8.0 LTS aislado como runtime de .NET.
- Omitir por ahora como plantilla de proyecto.
Si no tiene instalado el SDK de .NET Core, se le pedirá que lo instale.
Importante
En el caso de las funciones de .NET, se recomienda usar el modelo de trabajo aislado en lugar del modelo en proceso. Para ver una comparación de los modelos de trabajo en proceso y aislado, consulte Diferencias entre el modelo de trabajo aislado y el modelo en proceso para .NET en Azure Functions. En este ejemplo se usa el modelo de trabajo aislado.
Confirme que el nuevo proyecto aparece en el panel EXPLORADOR.
Instalación del paquete NuGet necesario
Debe instalar Microsoft.Azure.Functions.Worker.Extensions.Redis
, el paquete NuGet de la extensión Redis que permite que se usen notificaciones de espacio de claves de Redis como desencadenadores en Azure Functions.
Para instalar este paquete, vaya a la pestaña Terminal en VS Code y escriba el siguiente comando:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
Nota:
El paquete Microsoft.Azure.Functions.Worker.Extensions.Redis
se usa para las funciones de proceso de trabajo aislado de .NET. En su lugar, las funciones de .NET en proceso y todos los demás lenguajes usarán el paquete Microsoft.Azure.WebJobs.Extensions.Redis
.
Vaya a la instancia de Azure Managed Redis recién creada.
Vaya a su caché en Azure Portal y localice las Claves de acceso en el menú Recursos. Escriba o copie el contenido de la casilla Principal. Lo utilizará al crear la cadena de conexión.
Cree una Cadena de conexión utilizando el siguiente formato:
{your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False
. Si ha deshabilitado TLS/SSL, utilicessl=False
en su lugar.Conéctese a la instancia de Redis utilizando el método que prefiera, como la CLI de Redis o Redis Insights. Para obtener instrucciones sobre cómo conectarse a su instancia de Redis utilizando la CLI de Redis, consulte Uso de la herramienta de línea de comandos de Redis con Azure Managed Redis .
Configure las notificaciones del espacio de claves mediante el comando CONFIG SET:
CONFIG SET notify-keyspace-events KEA
KEA es una cadena de configuración que habilita las notificaciones del espacio de claves para todas las claves y eventos. Para obtener más información sobre las cadenas de configuración del espacio de claves, consulte la documentación de Redis.
Configuración del código de ejemplo para desencadenadores de Redis
En VS Code, agregue un archivo denominado Common.cs al proyecto. Esta clase se usa para ayudar a analizar la respuesta serializada JSON para el PubSubTrigger.
Copie y pegue el siguiente código en el archivo Common.cs:
public class Common { public const string connectionString = "redisConnectionString"; public class ChannelMessage { public string SubscriptionChannel { get; set; } public string Channel { get; set; } public string Message { get; set; } } }
Agregue un archivo denominado RedisTriggers.cs al proyecto.
Copie y pegue el ejemplo de código siguiente en el nuevo archivo:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisTriggers { private readonly ILogger<RedisTriggers> logger; public RedisTriggers(ILogger<RedisTriggers> logger) { this.logger = logger; } // PubSubTrigger function listens to messages from the 'pubsubTest' channel. [Function("PubSubTrigger")] public void PubSub( [RedisPubSubTrigger(Common.connectionString, "pubsubTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Function triggered on pub/sub message '{channelMessage.Message}' from channel '{channelMessage.Channel}'."); } // KeyeventTrigger function listens to key events from the 'del' operation. [Function("KeyeventTrigger")] public void Keyevent( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:del")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' deleted."); } // KeyspaceTrigger function listens to key events on the 'keyspaceTest' key. [Function("KeyspaceTrigger")] public void Keyspace( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:keyspaceTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key 'keyspaceTest' was updated with operation '{channelMessage.Message}'"); } // ListTrigger function listens to changes to the 'listTest' list. [Function("ListTrigger")] public void List( [RedisListTrigger(Common.connectionString, "listTest")] string response) { logger.LogInformation(response); } // StreamTrigger function listens to changes to the 'streamTest' stream. [Function("StreamTrigger")] public void Stream( [RedisStreamTrigger(Common.connectionString, "streamTest")] string response) { logger.LogInformation(response); } }
En este tutorial se muestran varias maneras de desencadenar en la actividad de Redis:
PubSubTrigger
, que se desencadena cuando se publica una actividad en el canal Pub/Sub denominadopubsubTest
.KeyspaceTrigger
, que se basa en el desencadenador Pub/Sub. Úselo para buscar cambios en la clavekeyspaceTest
.KeyeventTrigger
, que también se basa en el desencadenador Pub/Sub. Úselo para buscar cualquier uso del comandoDEL
.ListTrigger
, que busca cambios en la listalistTest
.StreamTrigger
, que busca cambios en la secuenciastreamTest
.
Conéctese a la caché
Para desencadenar en la actividad de Redis, deberá pasar la cadena de conexión de la instancia de caché. Esta información se almacena en el archivo local.settings.json que se ha creado automáticamente en la carpeta. Se recomienda usar el archivo de configuración local como procedimiento recomendado de seguridad.
Para conectarse a la memoria caché, agregue una sección
ConnectionStrings
en el archivo local.settings.json y añada la cadena de conexión mediante el parámetroredisConnectionString
. Esta sección debería parecerse a la de este ejemplo:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "redisConnectionString": "<your-connection-string>" } }
El código de Common.cs busca este valor cuando se ejecuta localmente:
public const string connectionString = "redisConnectionString";
Importante
Este ejemplo se ha simplificado para el tutorial. Para el uso en producción, recomendamos utilizar Azure Key Vaultpara almacenar la información de la cadena de conexión o autenticarse en la instancia de Redis utilizando Microsoft Entra ID.
Compilación y ejecución del código localmente
Cambie a la pestaña Ejecutar y depurar en VS Code y seleccione la flecha verde para depurar el código localmente. Si no tuviera instaladas las herramientas principales de Azure Functions, se le pedirá que las instale. En ese caso, deberá reiniciar VS Code después de la instalación.
El código debería crearse correctamente. Es posible realizar un seguimiento del progreso en la salida del terminal.
Para probar la funcionalidad del desencadenador, pruebe a crear y eliminar la clave
keyspaceTest
.Puede usar cualquier forma que prefiera para conectarse a la caché. Una manera sencilla es usar la herramienta de la consola integrada en el portal de Azure Cache for Redis. Vaya a la instancia de caché en Azure Portal y, a continuación, seleccione Consola para abrirla.
Importante
La herramienta de consola aún no está disponible para Azure Managed Redis. En su lugar, considere el uso de redis-cli o una herramienta como Redis Insight para ejecutar comandos directamente en la instancia de Redis.
Una vez que la consola esté abierta, pruebe los siguientes comandos:
SET keyspaceTest 1
SET keyspaceTest 2
DEL keyspaceTest
PUBLISH pubsubTest testMessage
LPUSH listTest test
XADD streamTest * name Clippy
Confirme que los desencadenadores se estén activando en el terminal.
Adición de enlaces de Redis
Los enlaces agregan una manera simplificada de leer o escribir datos almacenados en la instancia de Redis. Para demostrar la ventaja de los enlaces, agregamos otras dos funciones. Una se llama SetGetter
, que se desencadena cada vez que se establece una clave y devuelve el nuevo valor de la clave mediante un enlace de entrada. La otra se denomina StreamSetter
, que se desencadena cuando se agrega un nuevo elemento a la secuencia myStream
y usa un enlace de salida para escribir el valor true
en la clave newStreamEntry
.
Agregue un archivo denominado RedisBindings.cs al proyecto.
Copie y pegue el ejemplo de código siguiente en el nuevo archivo:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisBindings { private readonly ILogger<RedisBindings> logger; public RedisBindings(ILogger<RedisBindings> logger) { this.logger = logger; } //This example uses the PubSub trigger to listen to key events on the 'set' operation. A Redis Input binding is used to get the value of the key being set. [Function("SetGetter")] public void SetGetter( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] Common.ChannelMessage channelMessage, [RedisInput(Common.connectionString, "GET {Message}")] string value) { logger.LogInformation($"Key '{channelMessage.Message}' was set to value '{value}'"); } //This example uses the PubSub trigger to listen to key events to the key 'key1'. When key1 is modified, a Redis Output binding is used to set the value of the 'key1modified' key to 'true'. [Function("SetSetter")] [RedisOutput(Common.connectionString, "SET")] public string SetSetter( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:key1")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' was updated. Setting the value of 'key1modified' to 'true'"); return $"key1modified true"; } }
Cambie a la pestaña Ejecutar y depurar en VS Code y seleccione la flecha verde para depurar el código localmente. El código debería crearse correctamente. Es posible realizar un seguimiento del progreso en la salida del terminal.
Para probar la funcionalidad de enlace de entrada, pruebe a establecer un nuevo valor para cualquier clave, por ejemplo, mediante el comando
SET hello world
Debería ver que la funciónSetGetter
se desencadena y devuelve el valor actualizado.Para probar la funcionalidad de enlace de salida, intente agregar un nuevo elemento a la secuencia
myStream
mediante el comandoXADD myStream * item Order1
. Observe que la funciónStreamSetter
se desencadenó en la nueva entrada de flujo y establezca el valortrue
en otra clave denominadanewStreamEntry
. El comandoset
también desencadena la funciónSetGetter
.
Implementación de código en una función de Azure
Cree una nueva función de Azure:
Vuelva a la pestaña Azure y expanda la suscripción.
Haga clic con el botón derecho en Aplicación de funciones y, a continuación, seleccione Crear aplicación de funciones en Azure (avanzado).
Recibirá varias solicitudes de información para configurar la nueva aplicación de funciones:
- Escriba un nombre único.
- Seleccione .NET 8 aislado como pila de runtime.
- Seleccione Linux o Windows (ambos funcionan).
- Seleccione un grupo de recursos nuevo o existente para contener la aplicación de funciones.
- Seleccione la misma región que la instancia de caché.
- Seleccione Premium como plan de hospedaje.
- Cree un plan de Azure App Service nuevo.
- Seleccione el plan de tarifa EP1.
- Seleccione una cuenta de almacenamiento existente o cree una.
- Cree un recurso de Application Insights. Use el recurso para confirmar que el desencadenador funcione.
Importante
Actualmente no se admiten desencadenadores de Redis en las funciones de consumo.
Espere unos minutos hasta que se cree la nueva aplicación de funciones. Aparece en Aplicación de funciones en la suscripción. Haga clic con el botón derecho en la nueva aplicación de funciones y, a continuación, seleccione Implementar en la aplicación de funciones.
La aplicación se compila e inicia la implementación. Puede realizar un seguimiento del progreso en la ventana de salida.
Añadir información de cadena de conexión
Importante
Este ejemplo se ha simplificado para el tutorial. Para el uso en producción, recomendamos utilizar Azure Key Vaultpara almacenar la información de la cadena de conexión o autenticarse en la instancia de Redis utilizando Microsoft Entra ID.
En Azure Portal, vaya a la nueva aplicación de funciones y seleccione Variables de entorno en el menú de recursos.
En el panel de trabajo, vaya a Configuración de la aplicación.
En Nombre, escriba redisConnectionString.
En Valor, escriba la cadena de conexión.
Seleccione Aplicar en la página para confirmar.
Vaya al panel Información general y seleccione Reiniciar para reiniciar la aplicación de funciones con la información de la cadena de conexión.
Prueba de los desencadenadores y enlaces
Una vez que se complete la implementación y se agregue la información de la cadena de conexión, abra la aplicación de funciones en Azure Portal. A continuación, seleccione Secuencia de registro en el menú de recursos.
Espere a que Log Analytics se conecte y, a continuación, use la consola de Redis para activar cualquiera de los desencadenadores. Confirme que los desencadenadores se registren aquí.
Limpieza de recursos
Si desea seguir usando los recursos que creó en este artículo, mantenga el grupo de recursos.
De lo contrario, si ya ha terminado con los recursos, puede eliminar el grupo de recursos de Azure que ha creado para evitar cargos.
Importante
La eliminación de un grupo de recursos es irreversible. Cuando elimine un grupo de recursos, todos los recursos contenidos en él se eliminan permanentemente. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si ha creado los recursos en un grupo de recursos existente que contiene recursos que desea conservar, puede eliminar cada recurso individualmente en lugar de eliminar el grupo de recursos.
Para eliminar un grupo de recursos
Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
Seleccione el grupo de recursos que desea eliminar.
Si hay muchos grupos de recursos, use el cuadro Filtro para cualquier campo... y escriba el nombre del grupo de recursos que creó para este artículo. Seleccione el grupo de recursos en la lista de resultados.
Seleccione Eliminar grupo de recursos.
Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y, después, seleccione Eliminar.
Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.