Activador de Azure Functions con Event Grid

Los Azure Functions te permiten ejecutar código en respuesta a eventos emitidos por Azure Event Grid. Este es un patrón común para arquitecturas basadas en eventos.

Cómo funciona

Cuando un evento se publica en un tema de Event Grid al que tu función está suscrita, Event Grid invoca a tu función de Azure, pasando el evento como datos en la solicitud HTTP.

Configuración

1. Crear un tema de Event Grid

Si aún no tienes un tema de Event Grid, puedes crear uno en el portal de Azure.

2. Suscribirse a eventos

Crea una suscripción en tu tema de Event Grid y configura el punto de conexión de la suscripción para que apunte a la URL de tu Function App.

Nota: Asegúrate de que tu Function App tenga una identidad administrada habilitada si necesitas que Event Grid tenga permisos para invocar tu función.

3. Crear la Azure Function

Crea una función de Azure con un activador HTTP. La plantilla de Function App para el activador de Event Grid se encargará de la mayor parte de la configuración.

Ejemplo de definición de function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "event",
      "type": "eventGridTrigger",
      "direction": "in",
      "topicEndpoint": "{eventGridTopicEndpoint}",
      "subject": "{eventGridSubject}",
      "eventType": "{eventGridEventType}"
    },
    {
      "name": "outputBlob",
      "type": "blob",
      "path": "output-container/{rand-guid}.txt",
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    }
  ]
}

Ejemplo de código Python (__init__.py)

import logging
import json

import azure.functions as func

def main(event: func.EventGridEvent, outputBlob: func.Out[str]):
    logging.info(f"Evento recibido: {event.id}")
    logging.info(f"Asunto: {event.subject}")
    logging.info(f"Tipo de evento: {event.event_type}")
    logging.info(f"Datos: {event.data}")

    # Procesar los datos del evento
    event_data = event.get_json()
    
    # Ejemplo: Escribir los datos del evento en Blob Storage
    outputBlob.set(json.dumps(event_data))
    logging.info("Datos del evento escritos en Blob Storage.")

    # Si necesitas responder a Event Grid (raro para activadores), puedes hacerlo aquí
    # return func.HttpResponse("Evento procesado correctamente", status_code=200)

Parámetros del enlace

Nombre Tipo Descripción Obligatorio
event EventGridTrigger El objeto de evento de Event Grid recibido.
topicEndpoint string La URL del tema de Event Grid. No (configurado por Event Grid)
subject string El asunto del evento. No (configurado por Event Grid)
eventType string El tipo de evento. No (configurado por Event Grid)

Propiedades del objeto EventGridEvent

El objeto event proporcionará acceso a las siguientes propiedades:

Manejo de errores

Event Grid reintentará la entrega de eventos si tu función responde con un código de estado de error (por ejemplo, 5xx). Es importante implementar una lógica de manejo de errores robusta para asegurar que los eventos no se pierdan.

Consideración: Para cargas de trabajo de alta disponibilidad y tolerancia a fallos, considera usar un patrón de cola de mensajes entre Event Grid y tus Functions para desacoplar la entrega y el procesamiento.

Filtrado de eventos

Puedes configurar filtros en la suscripción de Event Grid para asegurar que tu función solo reciba los eventos que le interesan. Esto se hace en la configuración de la suscripción de Event Grid en el portal de Azure o mediante la CLI/ARM templates.

Escalado

Azure Functions se escala automáticamente en función de la carga de eventos entrantes. Event Grid entregará los eventos a tus funciones según sea necesario.