Share via


Enrutar eventos en la nube a webhooks con Azure Event Grid en Kubernetes

En este inicio rápido, creas un tema en Event Grid en Kubernetes, una suscripción para el tema y, a continuación, envías un evento de ejemplo al tema para probar el escenario.

Importante

Event Grid en Kubernetes con Azure Arc se encuentra actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Requisitos previos

  1. Conexión del clúster de Kubernetes a Azure Arc.
  2. Instalación de la extensión de Event Grid en el clúster de Kubernetes. Esta extensión implementa Event Grid en un clúster de Kubernetes.

Creación de una ubicación personalizada

Como extensión de ubicación de Azure, una ubicación personalizada le permite usar el clúster de Kubernetes habilitado para Azure Arc como ubicación de destino para implementar recursos, por ejemplo, temas de Event Grid. Una ubicación personalizada representa un espacio de nombres del clúster y es el lugar donde se implementan los temas y las suscripciones de eventos. En esta sección, creas una ubicación personalizada.

  1. Declare las siguientes variables para contener los valores del clúster Azure Arc, el grupo de recursos y los nombres de ubicación personalizados. Copie estas instrucciones en un editor, reemplace los valores y, luego, cópielos y péguelos en la ventana de bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Obtenga el identificador de recurso del clúster conectado de Azure Arc. Actualice los valores de los parámetros de nombre de clúster y grupo de recursos de Azure Arc antes de ejecutar el comando.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Obtenga el identificador de recurso de la extensión de Event Grid. En este paso se da por supuesto que el nombre que agregó para la extensión de Event Grid es eventgrid-ext. Actualice los nombres de clúster y grupo de recursos de Azure Arc antes de ejecutar el comando.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Crea una ubicación personalizada con los dos valores del paso anterior. Actualice los nombres de ubicación y grupo de recursos personalizados antes de ejecutar el comando.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Obtenga el identificador de recurso del recurso personalizado. Actualice el nombre de ubicación personalizado antes de ejecutar el comando.

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    Para más información sobre la creación de ubicaciones personalizadas, consulte Creación y administración de ubicaciones personalizadas en Kubernetes habilitado para Azure Arc.

de un tema

En esta sección, creas un tema en la ubicación personalizada que creaste en el paso anterior. Actualiza los nombres de los temas del grupo de recursos y de Event Grid antes de ejecutar el comando. Actualiza la ubicación si usas una ubicación que no sea el Este de EE. UU.

  1. Declare una variable para contener el nombre del tema.

    topicname="<TOPIC NAME>"
    
  2. Para crear el tema, ejecute el siguiente comando.

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    Para obtener más información sobre el comando de la CLI, consulte az eventgrid topic create.

Creación de un punto de conexión de mensaje

Antes de crear una suscripción para el tema personalizado, cree un 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.

  1. En la página del artículo, seleccione Implementar en Azure para implementar la solución en su suscripción. En Azure Portal, proporcione valores para los parámetros.

    Button to deploy the Resource Manager template to Azure.

  2. La implementación puede tardar unos minutos en completarse. 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

    Si se produce un error en la implementación, compruebe el mensaje de error. Puede deberse a que ya se ha utilizado el nombre del sitio web. Vuelva a implementar la plantilla y elija un nombre diferente para el sitio.

  3. Verá el sitio, pero aún no se ha publicado en él ningún evento.

    View new site

una suscripción

Los suscriptores pueden registrarse en eventos publicados en un tema. Para recibir cualquier evento, debes crear una suscripción de Event Grid para un tema de interés. Una suscripción de eventos define el destino al que se envían esos eventos. Para obtener información sobre todos los destinos o controladores que se admiten, consulte Controladores de eventos.

Para crear una suscripción de eventos con un destino de WebHook (punto de conexión HTTPS), escriba un nombre para ella, actualice el nombre del sitio web y ejecute el siguiente comando.

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

Para obtener más información sobre el comando de la CLI, consulte az eventgrid event-subscription create.

Envío de eventos al tema

  1. Ejecute el comando siguiente para obtener el punto de conexión para el tema: Después de copiar y pegar el comando, actualice el nombre del tema y el nombre del grupo de recursos antes de ejecutar el comando. Publicas eventos de ejemplo en este punto de conexión del tema.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Ejecute el siguiente comando para obtener la clave para el tema personalizado: Después de copiar y pegar el comando, actualice el nombre del tema y el nombre del grupo de recursos antes de ejecutar el comando. Es la clave principal del tema. Para obtener esta clave en Azure Portal, cambie a la pestaña Claves de acceso de la página Tema de Event Grid. Para poder publicar un evento en un tema personalizado, necesita la clave de acceso.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Ejecute el comando de CURL siguiente para publicar el evento. Especifique la dirección URL y la clave del punto de conexión de los pasos 1 y 2 antes de ejecutar el comando.

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    Si la dirección URL del punto de conexión del tema del paso 1 es una dirección IP privada, como cuando el tipo de servicio del agente de Event Grid es ClusterIP, puede ejecutar Curl desde otro pod del clúster para tener acceso a esa dirección IP. Por ejemplo, puede realizar los pasos siguientes:

    1. Cree un archivo de manifiesto con la configuración siguiente. Es posible que desee ajustar dnsPolicy de acuerdo con sus necesidades. Para obtener más información, consulta DNS para servicios y pods.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Cree el pod.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Compruebe que el pod se está ejecutando.

          kubectl get pod test-pod
      
    4. Inicio de una sesión de shell desde el contenedor

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    En este momento, tienes una sesión de shell desde un contenedor en ejecución en el clúster desde el que puedes ejecutar el comando Curl descrito en un paso anterior.

    Nota

    Para obtener información sobre cómo enviar eventos en la nube mediante lenguajes de programación, consulte los ejemplos siguientes:

Comprobación en Visor de Event Grid

Ha desencadenado el evento y Event Grid ha enviado el mensaje al punto de conexión que configuró al realizar la suscripción. Vaya a la aplicación web para ver el evento que acaba de enviar.

View received event in Event Grid Viewer

Pasos siguientes

Vea los artículos siguientes: