Entrega de eventos a Azure Event Hubs mediante temas de espacio de nombres: CLI de Azure
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 Event Hubs. 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 nuevo recurso de Event Hubs
Cree un recurso de Event Hubs que se use como destino del controlador para la suscripción de entrega de inserción del tema de espacio de nombres.
Declare una variable que contenga el nombre del espacio de nombres de Event Hubs.
eventHubsNamespace="<your-event-hubs-namespace-name>"
Cree el espacio de nombres de Event Hubs.
az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location
Declare una variable que contenga el nombre del centro de eventos.
eventHubsEventHub="<your-event-hub-name>"
Ejecute el siguiente comando para crear un centro de eventos en el espacio de nombres.
az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub
Entrega de eventos a Event Hubs mediante identidad administrada
Para enviar eventos a Event Hubs en el espacio de nombres de Event Hubs mediante identidad administrada, siga estos pasos:
- Habilite la identidad administrada asignada por el sistema o asignada por el usuario: espacios de nombres. Pase a la siguiente sección para encontrar cómo habilitar la identidad administrada mediante la CLI de Azure.
- Agregue la identidad al rol Remitente de datos de Azure Event Hubs en el espacio de nombres de Event Hubs y continúe leyendo en la sección siguiente para encontrar cómo agregar la asignación de roles.
- Habilite el valor Allow trusted Microsoft services to bypass this firewall (Permitir que servicios de Microsoft de confianza omitan este firewall) en el espacio de nombres de Event Hubs.
- Configure la suscripción de eventos que emplea un centro de eventos como punto de conexión para usar la identidad administrada asignada por el sistema o por el usuario.
Habilitación de la identidad administrada en el espacio de nombres de Event Grid
Habilite la identidad administrada asignada por el sistema en el espacio de nombres de Event Grid.
az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}
Adición de la asignación de roles en Event Hubs para la identidad administrada de Event Grid
Obtenga el identificador de entidad de seguridad de identidad administrada del sistema del espacio de nombres de Event Grid.
principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
Obtenga el identificador de recurso del centro de eventos de Event Hubs.
eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
Agregue la asignación de roles en Event Hubs para la identidad administrada del sistema de Event Grid.
az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
Creación de una suscripción a evento
Cree una nueva suscripción de eventos de entrega de inserción.
event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventHubResourceId\"}}}}}}"
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
Vaya a la página Espacio de nombres de Event Hubs de Azure Portal, actualícela y compruebe si el contador de mensajes entrantes del gráfico indica que se ha recibido un evento.
Pasos siguientes
En este artículo, ha creado y configurado el espacio de nombres de Event Grid y los recursos de Event Hubs. Para obtener instrucciones paso a paso para recibir eventos de un centro de eventos, consulte estos tutoriales: