Hace apenas dos semanas se anunció un nuevo servicio llamado Azure Event Grid el cual tiene como cometido enrutar eventos. Esto puede sonar un poco abstracto de primeras pero déjame que te lo explique con un ejemplo a lo largo de este post.
Antes de comenzar con este servicio debes tener claro los siguientes conceptos:
- Evento: se trata de una pequeña cantidad de información que describe lo ocurrido en un sistema. Todo evento tiene información común: la fuente que ha generado dicho evento, el momento en el que ocurrió, el tipo y un identificador único.
- Publicador de eventos: se trata de la fuente que genera los eventos.
- Topic: Es el mecanismo que utiliza Azure Event Grid para recibir los eventos de los publicadores mencionados anteriormente. También es el lugar donde los suscriptores se suscriben con el fin de recuperar los eventos de su interés. Existen una serie de topics que ya están disponibles, relacionados con la plataforma de Azure, pero también es posible crear los tuyos propios.
- Suscripción: es el enlace de los servicios o aplicaciones con uno o más topics dentro de Azure Event Grid.
- Manejadores de eventos: son las aplicaciones o servicios que tratarán los eventos, una vez recibidos por parte de Azure Event Grid.
La foto que describe dichos conceptos es la siguiente:
Para verlo con un ejemplo voy a crear un topic personalizado en el cual voy a tener como publicador el propio Azure Cloud Shell y como suscriptor voy a utilizar una Logic App, de tal manera que Azure Event Grid será capaz de aceptar los eventos que lleguen desde este primero y enrutarlo a este segundo sin que este tenga la necesidad de hacer polling para saber si hay un evento nuevo pendiente de ser procesado.
Lo primero que debes hacer es entrar en https://portal.azure.com y crear un nuevo Topic a través del botón New y buscando Event Grid Topic en el cuadro de texto.
La creación es bastante sencilla, solo tienes que elegir un nombre para el topic, la suscripción donde lo quieres desplegar, el grupo de recursos y una ubicación que, durante la preview del servicio, a día de hoy sólo se permite West Central US y West US 2.
Cuando haya finalizado la creación, puedes encontrarlo en el Resource group que creaste o seleccionaste. La información que aparece sobre el mismo es la siguiente:
El siguiente paso será registrar un suscriptor con el objetivo de que esté a la suscrito a cualquier evento que Event Grid reciba y pueda enrutar. En este ejemplo vamos a usar una Logic App. Haz clic en el botón New y selecciona la opción Logic App.
Una vez creada, dentro de la logic app selecciona la plantilla en blanco.
Desde que Azure Event Grid se anunció, hay disponible un conector que te permite suscribirte a diferentes topics ya existentes o incluso a los que tu puedas crear, como es el caso. Para este ejemplo voy a utilizar como trigger el conector de Event Grid. Para localizarlo basta con escribir event grid en el buscador.
Este conector te pedirá conectarse con tu suscripción de Microsoft Azure. Una vez hayas permitido el acceso, la configuración para suscribirte al topic que acabas de crear es la siguiente:
Tan sólo con este paso ya estarás suscrito con tu Logic App al Topic de Event Grid. De hecho si accedes de nuevo a este último verás que ya tienes dado de alta un suscriptor que es tu Logic App.
Para comprobar que el suscriptor recibe eventos, vuelve a tu Logic App para añadir un paso más. Lo más sencillo es elegir una de las opciones para enviar correos. Existen diferentes proveedores por lo que puedes elegir cualquiera de ellos. En este ejemplo voy a selecionar Outlook.com – send an email. Inicia sesión con tus credenciales del proveedor elegido.
Para comprobar que la configuración funciona correctamente, vamos a enviar un evento al topic creado en Event Grid, el cual hará que el servicio lo enrute a los suscriptores registrados, en este caso tu Logic App, que desencadenará el envío de un correo electrónico desde Outlook.com a Gmail. Para ello voy a utilizar Azure Cloud Shell con los siguientes comandos:
- Recuperar el endpoint del topic de Azure Event Grid (es la URL a donde tengo que hacer la petición con la información de mi evento):
endpoint=$(az eventgrid topic show --name returngistopic -g EventGridDemo --query "endpoint" --output tsv)
- Recuperar la clave del endpoint (las llamadas a este deben hacerse de forma segura, utilizando esta key como token en la cabecera de la llamada):
key=$(az eventgrid topic key list --name returngistopic -g EventGridDemo --query "key1" --output tsv)
- Descargar JSON de ejemplo (para no tener que crear un json con el evento de ejemplo):
body=$(eval echo "'$(curl https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/customevent.json)'")
- Ver JSON (para que puedas ver la información que vas a mandar al topic):
echo "$body"
- Mandar evento al topic con cURL:
curl -X POST -H "aeg-sas-key: $key" -d "$body" $endpoint
El resultado que debes esperar es parecido al siguiente:
En la Logic App verás que se habrá ejecutado con éxito después de recibir el evento.
Si accedes al registro verás la información recibida en el primer paso, que es la llamada de Event Grid a la Logic App
y en el segundo la información enviada por correo electrónico, recuperando los valores obtenidos en el primer paso.
Si vas al correo que habías puesto como destinatario en tu Logic App deberías de haber recibido uno con la información del evento que acabas de crear.
¡Saludos!