Entrega de eventos a webhooks mediante temas de espacio de nombres: CLI de Azure (versión preliminar)
El artículo proporciona instrucciones paso a paso para publicar eventos en Azure Event Grid en el formato JSON de CloudEvents y entregar esos eventos mediante el modelo de entrega de inserción. Para ser específico, use la CLI de Azure y Curl para publicar eventos en un tema de espacio de nombres en Event Grid e insertar esos eventos desde una suscripción de eventos a un destino del controlador de webhook. Para obtener más información sobre el modelo de entrega de inserción, consulte Introducción a la entrega de inserción.
Nota:
La extensión de Event Grid de la CLI de Azure aún no admite espacios de nombres y ninguno de los recursos que contiene. Usaremos el recurso de la CLI de Azure para crear recursos de Event Grid.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando
az login
. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
En este artículo se necesita la versión 2.0.70 de la CLI de Azure, o cualquier versión posterior. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
Habilitar el proveedor de recursos de Event Grid
Si aún no ha usado anteriormente Event Grid en su suscripción de Azure, puede que tenga que registrar el proveedor de recursos de Event Grid. Ejecute el siguiente comando para registrar el proveedor:
az provider register --namespace Microsoft.EventGrid
El registro puede tardar unos instantes en finalizar. Para comprobar el estado, ejecute el comando siguiente:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Cuando
registrationState
seaRegistered
, estará preparado para continuar.
Crear un grupo de recursos
Cree un grupo de recursos de Azure con el comando az group create. Este grupo de recursos se usa para contener todos los recursos creados en este artículo.
Los pasos generales para usar Cloud Shell para ejecutar comandos son:
- Seleccione Abrir Cloud Shell para ver una ventana de Azure Cloud Shell en el panel derecho.
- Copie el comando y péguelo en la ventana de Azure Cloud Shell.
- Presione ENTRAR para ejecutar el comando.
Declare una variable para contener el nombre de un grupo de recursos de Azure. Especifique un nombre para el grupo de recursos reemplazando
<your-resource-group-name>
por un valor que desee.resource_group="<your-resource-group-name>"
location="<your-resource-group-location>"
Cree un grupo de recursos. Cambie la ubicación como considere oportuno.
az group create --name $resource_group --location $location
Creación de un espacio de nombres
Un espacio de nombres de Event Grid proporciona un punto de conexión definido por el usuario en el que se publican los eventos. En el ejemplo siguiente se crea en un grupo de recursos el espacio de nombres mediante Bash en Azure Cloud Shell. El nombre del espacio de nombres debe ser único porque forma parte de una entrada del Sistema de nombres de dominio (DNS). Un nombre de espacio de nombres debe cumplir las reglas siguientes:
- Debe tener entre 3 y 50 caracteres.
- Debe ser único en la región.
- Los únicos caracteres permitidos son a-z, A-Z, 0-9 y -
- No debe empezar con prefijos de palabra clave reservados como
Microsoft
,System
oEventGrid
.
Declare una variable para contener el nombre del espacio de nombres de Event Grid. Especifique un nombre para el espacio de nombres reemplazando
<your-namespace-name>
con un valor que desee.namespace="<your-namespace-name>"
Cree un espacio de nombres. Es posible que quiera cambiar la ubicación en la que se implementa.
az eventgrid namespace create -g $resource_group -n $namespace -l $location
Creación de un tema de espacio de nombres
Cree un tema que se use para contener todos los eventos publicados en el punto final del espacio de nombres.
Declare una variable para contener el nombre de su tema de espacio de nombres. Especifique un nombre para el tema del espacio de nombres reemplazando
<your-topic-name>
con un valor que desee.topic="<your-topic-name>"
Cree el tema del espacio de nombres:
az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace
Creación de un punto de conexión de mensaje
Antes de suscribirse al tema del espacio de nombres, vamos a crear el punto de conexión para el mensaje de evento. Normalmente, el punto de conexión realiza acciones en función de los datos del evento. Para simplificar este inicio rápido, se implementa una aplicación web precompilada que muestra los mensajes de los eventos. La solución implementada incluye un plan de App Service, una aplicación web de App Service y el código fuente desde GitHub.
Copie el siguiente comando, especifique un nombre para la aplicación web (ejemplo del visor de Event Grid) y presione ENTER para ejecutar el comando. Reemplace
<your-site-name>
por un nombre único para la aplicación web. El nombre de la aplicación web debe ser único, ya que es parte de la entrada DNS.sitename="<your-site-name>"
Ejecute
az deployment group create
para implementar la aplicación web mediante una plantilla de Azure Resource Manager.az deployment group create \ --resource-group $resource_group \ --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \ --parameters siteName=$sitename hostingPlanName=viewerhost
La implementación puede tardar unos minutos en finalizar. Después de que la implementación se haya realizado correctamente, puede ver la aplicación web para asegurarse de que se está ejecutando. En un explorador web, vaya a: https://<your-site-name>.azurewebsites.net
. Debería ver el sitio, que no muestra ningún mensaje actualmente.
Entregar eventos al webhook del Visor de Azure Event Grid
Cree una suscripción de eventos de entrega de inserción al espacio de nombres mediante el webhook para el Visor de Azure Event Grid.
Defina una variable para contener el nombre de la suscripción del evento.
event_subscription="<your_event_subscription_name>"
Reemplace
EVENTGRIDWEBSITENAME
por el nombre del sitio web del Visor de Event Grid. Por ejemplo:contosoegridviewer
.az resource create --api-version 2024-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"eventDeliverySchema\": \"CloudEventSchemaV1_0\",\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"destination\":{\"endpointType\":\"WebHook\",\"properties\":{\"endpointUrl\":\"https:\/\/$sitename.azurewebsites.net\/api/updates\"}}}}}"
Envío de eventos al tema
Ahora, envíe un evento de ejemplo al tema de espacio de nombres siguiendo los pasos de esta sección.
Enumeración de las claves de acceso del espacio de nombres
Obtenga las claves de acceso asociadas con el espacio de nombres que creó. Usará una de ellas para autenticarse al publicar eventos. Para enumerar sus claves, primero necesita el id. de recurso de espacio de nombres completo. Para obtenerlo, ejecute el siguiente comando:
namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
Obtenga la primera clave del espacio de nombres:
key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
Publicación de un evento
Recupere el nombre de host del espacio de nombres. Se usa para crear el punto de conexión HTTP del espacio de nombres al que se envían los eventos. Las siguientes operaciones estaban disponibles por primera vez con la versión de API
2023-06-01-preview
.publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
Cree un evento de ejemplo compatible con CloudEvents:
event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
El elemento
data
es la carga del evento. En este campo, puede usar cualquier archivo JSON bien formado. Consulte las especificaciones de CloudEvents para obtener más información sobre las propiedades (también conocidas como atributos de contexto) que pueden ir en un evento.Use CURL para enviar el evento al tema. CURL es una utilidad que envía solicitudes HTTP.
curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
Compruebe que el Visor de Azure Event Grid recibió el evento
Compruebe que la aplicación web Visor de Azure Event Grid muestra los eventos que recibió de Event Grid.
Contenido relacionado
En este inicio rápido, ha usado un webhook como controlador de eventos. Para obtener una guía de inicio rápido que usa un centro de eventos de Azure como controlador de eventos, consulte Entrega de eventos a Azure Event Hubs mediante temas de espacio de nombres.