Azure Fundamentals · Lección

Event Grid y arquitectura controlada por eventos

Enrute eventos de servicios de Azure y publicadores personalizados mediante Event Grid, distribúyalos entre varios suscriptores y compare Event Grid con Event Hubs y Service Bus.

Lección 4 de 413 pasos

Event Grid y arquitectura controlada por eventos es una lección gratuita de Azure Fundamentals en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Azure Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Azure Fundamentals incluye 4 lecciones en total.

¿Qué es una arquitectura basada en eventos?

En una arquitectura basada en eventos, los componentes se comunican publicando y suscribiéndose a eventos en lugar de llamarse directamente entre sí. Un componente (productor) emite un evento cuando ocurre algo relevante —se carga un archivo, se realiza un pedido o un dispositivo envía una medición—. Otros componentes (suscriptores) reaccionan a los eventos que les interesan, de forma independiente y asíncrona. Esto desacopla a los productores de los consumidores, lo que mejora la escalabilidad, la resiliencia y la mantenibilidad.

¿Qué es Azure Event Grid?

Azure Event Grid es un servicio de enrutamiento de eventos totalmente administrado que entrega eventos desde los orígenes (publicadores) hasta los controladores (suscriptores) mediante un modelo de inserción. Event Grid está diseñado para eventos reactivos y discretos: algo ha cambiado y debe reaccionar de inmediato. Garantiza una entrega de al menos una vez con reintentos automáticos, admite filtros para que los suscriptores solo reciban eventos relevantes y puede enrutar eventos a Azure Functions, Logic Apps, webhooks, Event Hubs y colas de Service Bus.

Temas y suscripciones a eventos de Event Grid

Los publicadores envían eventos a un tema de Event Grid. Los suscriptores crean suscripciones a eventos en un tema y especifican un punto de conexión y reglas de filtrado opcionales. Un mismo tema puede tener varias suscripciones; cada suscripción recibe una copia independiente de los eventos que coinciden. Los servicios de Azure, como Blob Storage, Resource Manager, Service Bus y Azure Container Registry, son orígenes de eventos integrados con temas del sistema que no requieren configuración adicional.

# Create a custom Event Grid topic
az eventgrid topic create \
  --name MyEventTopic \
  --resource-group MyRG \
  --location eastus

# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
  --endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'

Esquema de eventos

Los eventos publicados en Event Grid siguen un esquema JSON estándar con campos obligatorios: id (identificador único), eventType (por ejemplo, Microsoft.Storage.BlobCreated), subject (ruta al recurso del evento), eventTime (marca de tiempo ISO 8601), dataVersion y data (carga útil específica del evento). Event Grid también admite el esquema CloudEvents (estándar de CNCF) para interoperar con otras plataformas de eventos.

// Event Grid event payload (Event Grid schema)
[
  {
    'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
    'eventType': 'Microsoft.Storage.BlobCreated',
    'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
    'eventTime': '2025-01-15T12:30:00.000Z',
    'data': {
      'api': 'PutBlockList',
      'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
      'contentType': 'image/jpeg',
      'contentLength': 524288
    },
    'dataVersion': '',
    'metadataVersion': '1'
  }
]

Filtrado de eventos

Las suscripciones a eventos admiten el filtrado para reducir el ruido en el extremo del suscriptor. Puede filtrar por tipo de evento (recibir solo BlobCreated, no BlobDeleted), por prefijo o sufijo del asunto (solo blobs de un contenedor específico) o mediante filtros avanzados en cualquier campo de los datos del evento, usando operadores como StringContains, NumberGreaterThan y BoolEquals. El filtrado se realiza en el servidor, por lo que los suscriptores solo reciben los eventos que coinciden con sus criterios.

# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
  --name jpgImageSub \
  --source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
  --endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
  --included-event-types 'Microsoft.Storage.BlobCreated' \
  --subject-ends-with '.jpg'

Event Grid frente a Event Hubs y Service Bus

Tres servicios de Azure gestionan eventos y mensajes; elija según su escenario. Event Grid sirve para el enrutamiento reactivo de eventos (bajo volumen, eventos discretos y reactivos; por ejemplo, una notificación de cambio de recurso). Event Hubs sirve para la transmisión de eventos de alto rendimiento (millones de eventos por segundo, telemetría y canalizaciones de macrodatos). Service Bus sirve para la mensajería empresarial con ordenación, deduplicación, mensajes en una cola de mensajes fallidos y transacciones (procesamiento de pedidos y transacciones financieras).

// Decision guide:
// Event Grid  — 'Something happened, react to it'
//               Azure resource events, webhooks, low-latency fan-out
//               Price: per event (cheap for low volume)

// Event Hubs  — 'Capture a firehose of streaming data'
//               IoT telemetry, log aggregation, real-time analytics
//               Price: per throughput unit + capture

// Service Bus — 'Reliable message delivery between services'
//               Order processing, workflow steps, dead-letter queues
//               Price: per operation + messaging units

Publicación de eventos personalizados

Publique eventos personalizados en un tema de Event Grid mediante una solicitud HTTP POST sencilla con la clave de acceso del tema. Cualquier servicio o aplicación que pueda realizar solicitudes HTTP puede publicar eventos. Esto facilita enormemente la emisión de eventos desde aplicaciones locales, servicios de terceros o servicios de Azure que no cuentan con compatibilidad nativa con Event Grid. Agrupe hasta 1 MB de eventos por POST para mejorar la eficiencia.

# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)

# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
  -H 'Content-Type: application/json' \
  -H "aeg-sas-key: $TOPIC_KEY" \
  -d '[{
    "id": "event-001",
    "eventType": "Contoso.OrderPlaced",
    "subject": "/orders/ORD-12345",
    "eventTime": "2025-01-15T12:00:00Z",
    "data": { "orderId": "ORD-12345", "total": 99.99 },
    "dataVersion": "1.0"
  }]'

Directivas de mensajes fallidos y reintentos

Si un intento de entrega de un evento falla (el suscriptor devuelve un estado HTTP distinto de 2xx), Event Grid vuelve a intentarlo mediante un retroceso exponencial con variación aleatoria durante un máximo de 24 horas (configurable hasta 72 horas), con un máximo de 30 reintentos. Una vez agotados los reintentos, Event Grid puede enviar los eventos no entregados a una cola de mensajes fallidos en un contenedor de Azure Blob Storage para investigarlos manualmente. Configure esta opción cuando la entrega fiable de eventos sea crítica y necesite auditar o volver a procesar los eventos fallidos.

# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../topics/MyEventTopic' \
  --deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
  --max-delivery-attempts 30 \
  --event-ttl 1440  # 24 hours in minutes

Introducción a Azure Event Hubs

Azure Event Hubs es una plataforma distribuida de transmisión de datos capaz de recibir y procesar millones de eventos por segundo. Utiliza un modelo de consumidores particionado: los eventos se distribuyen entre particiones y cada grupo de consumidores lee los eventos de forma independiente y a su propio ritmo. Esto permite que varios consumidores procesen la misma secuencia sin coordinación. Entre los casos de uso habituales se incluyen la ingesta de telemetría de IoT, la agregación de registros de aplicaciones, el análisis de flujos de clics y las canalizaciones de datos para paneles en tiempo real.

# Create an Event Hubs namespace and hub
az eventhubs namespace create \
  --name myEventHubNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az eventhubs eventhub create \
  --name telemetry \
  --namespace-name myEventHubNS \
  --resource-group MyRG \
  --partition-count 8 \
  --message-retention 3  # Days to retain events

Azure Service Bus para mensajería fiable

Azure Service Bus es un agente de mensajería empresarial que proporciona colas (punto a punto) y temas con suscripciones (publicación-suscripción). A diferencia de Event Grid (sin confirmación de entrega) y Event Hubs (transmisión), Service Bus garantiza la entrega ordenada (colas FIFO), la detección de duplicados, las colas de mensajes fallidos para errores de procesamiento, las sesiones de mensajes para el procesamiento agrupado y las transacciones; todo ello es esencial para los flujos de procesamiento financiero y de pedidos.

# Create a Service Bus namespace and queue
az servicebus namespace create \
  --name myServiceBusNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az servicebus queue create \
  --name order-processing \
  --namespace-name myServiceBusNS \
  --resource-group MyRG \
  --enable-dead-lettering-on-message-expiration true \
  --max-delivery-count 10  # Move to dead-letter after 10 failed attempts

Patrón práctico basado en eventos: procesamiento de archivos

Un patrón habitual basado en eventos de Azure es el siguiente: un usuario carga un archivo en Blob Storage, que genera un evento BlobCreated para Event Grid. Event Grid enruta el evento a una Azure Function que procesa el archivo (cambia el tamaño de una imagen, extrae texto o valida datos) y escribe el resultado en Azure SQL Database. Si el procesamiento falla, el evento se envía a una cola de mensajes fallidos en un contenedor de almacenamiento. Toda esta canalización funciona sin sondeos y sin recursos de proceso persistentes cuando está inactiva.

// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
  const blobUrl = eventGridEvent.data.url;
  const blobName = eventGridEvent.subject.split('/blobs/').pop();

  context.log('Processing image:', blobName);

  // Process via Cognitive Services Vision API
  const tags = await analyzeImage(blobUrl);

  // Write metadata to Cosmos DB via output binding
  context.bindings.cosmosOutput = {
    id: blobName,
    tags,
    processedAt: new Date().toISOString()
  };

  context.log('Processing complete for:', blobName);
};

Comprobación rápida

Compruebe sus conocimientos sobre los conceptos de Microsoft Azure Fundamentals (AZ-900) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que Azure Event Grid enruta eventos discretos desde publicadores hasta suscriptores mediante entrega por inserción, filtrado y mensajes fallidos; ha conocido la diferencia principal entre Event Grid (eventos reactivos), Event Hubs (transmisión) y Service Bus (mensajería empresarial fiable); y ha aprendido a crear canalizaciones basadas en eventos encadenando eventos de Blob Storage a través de Event Grid hasta Azure Functions. A continuación, exploraremos los servicios de Azure DevOps.

Gratis para empezar

Aprende Azure Fundamentals con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Event Grid y arquitectura controlada por eventos» es gratis?

Sí — el texto completo de «Event Grid y arquitectura controlada por eventos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Azure Fundamentals, actualiza a CoddyKit PRO. El curso de Azure Fundamentals incluye 4 lecciones en total.

¿Qué aprenderé en «Event Grid y arquitectura controlada por eventos»?

Enrute eventos de servicios de Azure y publicadores personalizados mediante Event Grid, distribúyalos entre varios suscriptores y compare Event Grid con Event Hubs y Service Bus. Practicas Azure Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Azure Fundamentals?

No se requiere experiencia previa. Azure Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Event Grid y arquitectura controlada por eventos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Azure Fundamentals?

Sí. Cada lección de Azure Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Desencadenadores y enlaces de Azure Functions
  2. Durable Functions para flujos de trabajo con estado
  3. Azure Logic Apps
  4. Event Grid y arquitectura controlada por eventos
← Volver a Azure Fundamentals