Partager via


Router des événements cloud vers des Webhooks avec Azure Event Grid sur Kubernetes

Dans ce guide de démarrage rapide, vous créez une rubrique dans Event Grid sur Kubernetes, créez un abonnement pour la rubrique, puis envoyez un échantillon d’événement à la rubrique pour tester le scénario.

Important

Event Grid sur Kubernetes avec Azure Arc est actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Prérequis

  1. Connecter votre cluster Kubernetes à Azure Arc.
  2. Installer l’extension Event Grid sur le cluster Kubernetes. Cette extension déploie Event Grid sur un cluster Kubernetes.

Créer un emplacement personnalisé

En tant qu’extension d’emplacement Azure, un emplacement personnalisé vous permet d’utiliser votre cluster Kubernetes compatible avec Azure arc comme emplacement cible pour le déploiement de ressources, telles que des rubriques de Event Grid. Un emplacement personnalisé représente un espace de noms dans le cluster et est l’endroit où les rubriques et les abonnements à des événements sont déployés. Dans cette section, vous créez un emplacement personnalisé.

  1. Déclarez les variables suivantes pour stocker les valeurs du cluster Azure Arc, du groupe de ressources et des noms d’emplacements personnalisés. Copiez ces instructions dans un éditeur, remplacez les valeurs, puis copiez/collez-les dans la fenêtre bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Récupérez l’ID de ressource du cluster Azure Arc connecté. Mettez à jour les valeurs du nom du cluster Azure Arc et des paramètres du groupe de ressources avant d’exécuter la commande.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Obtenez l’ID de ressource de l’extension Event Grid. Cette étape suppose que le nom que vous avez donné pour l’extension de Event Grid est eventgrid-ext\ . Mettez à jour les noms de cluster et de groupe de ressources Azure Arc avant d’exécuter la commande.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Créez un emplacement personnalisé à l’aide des deux valeurs de l’étape précédente. Mettez à jour les noms d’emplacement et de groupe de ressources personnalisés avant d’exécuter la commande.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Obtenez ID de ressource de l’emplacement personnalisé. Mettez à jour le nom de l’emplacement personnalisé avant d’exécuter la commande.

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

    Pour plus d’informations sur la création d’emplacements personnalisés, consultez Créer et gérer des emplacements personnalisés sur Kubernetes avec Azure Arc activé.

Création d'une rubrique

Dans cette section, vous créez une rubrique dans l’emplacement personnalisé que vous avez créé à l’étape précédente. Mettez à jour les noms des groupes de ressources et des rubriques Event Grid avant d’exécuter la commande. Mettez à jour l’emplacement si vous utilisez un emplacement autre qu’USA Est.

  1. Déclarez une variable pour contenir le nom de la rubrique.

    topicname="<TOPIC NAME>"
    
  2. Pour créer une rubrique, exécutez la commande suivante.

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

    Pour plus d’informations sur cette commande CLI, consultez az eventgrid topic create.

Créer un point de terminaison de message

Avant de créer un abonnement pour la rubrique personnalisée, créez un point de terminaison pour le message d’événement. En règle générale, le point de terminaison entreprend des actions en fonction des données d’événement. Pour simplifier ce guide de démarrage rapide, vous allez déployer une application web prédéfinie qui affiche les messages d’événement. La solution déployée comprend un plan App Service, une offre App Service Web Apps et du code source en provenance de GitHub.

  1. Dans la page de l’article, sélectionnez Déployer sur Azure pour déployer la solution sur votre abonnement. Dans le portail Azure, indiquez des valeurs pour les paramètres.

    Bouton pour déployer le modèle Resource Manager sur Azure.

  2. Le déploiement peut prendre quelques minutes. Une fois le déploiement réussi, affichez votre application web pour vérifier qu’elle s’exécute. Dans un navigateur web, accédez à : https://<your-site-name>.azurewebsites.net

    Si le déploiement échoue, consultez le message d’erreur. L’échec peut être dû au fait que le nom du site web est déjà pris. Redéployez le modèle et choisissez un autre nom pour le site.

  3. Vous voyez le site, mais aucun événement n’est encore posté sur celui-ci.

    Afficher le nouveau site

Création d’un abonnement

Les abonnés peuvent s’inscrire aux événements publiés dans une rubrique. Pour recevoir des événements, vous devez créer un abonnement Event Grid pour une rubrique qui vous intéresse. Un abonnement aux événements définit la destination à laquelle ces événements sont envoyés. Pour plus d’informations sur toutes les destinations ou les gestionnaires pris en charge, consultez Gestionnaires d’événements.

Pour créer un abonnement d’événement avec un webhook (point de terminaison HTTP), entrez un nom pour l’abonnement à l’événement, mettez à jour le nom du site Web, puis exécutez la commande suivante.

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

Pour plus d’informations sur cette commande CLI, consultez az eventgrid event-subscription create.

Envoyer des événements à la rubrique

  1. Exécutez la commande suivante afin d’obtenir le point de terminaison pour la rubrique : Après avoir copié et collé la commande, et avant de l’exécuter, mettez à jour le nom de la rubrique et le nom du groupe de ressources. Vous publiez des exemples d’événements sur ce point de terminaison de rubrique.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Exécutez la commande suivante afin d’obtenir la clé pour la rubrique personnalisée  : Après avoir copié et collé la commande, et avant de l’exécuter, mettez à jour le nom de la rubrique et le nom du groupe de ressources. C’est la clé principale de la rubrique. Pour récupérer cette clé à partir du portail Azure, basculez vers l’onglet Clés d’accès de la page Rubrique Event Grid. Pour être en mesure de poster un événement dans une rubrique personnalisée, vous avez besoin de la clé d’accès.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Exécutez la commande Curl suivante pour publier l’événement : Spécifiez l’URL et la clé du point de terminaison de l’étape 1 et 2 avant d’exécuter la commande.

    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 l’URL du point de terminaison de la rubrique de l’étape 1 est une adresse IP privée, comme dans le cas où le type de service du répartiteur Event Grid est ClusterIP, vous pouvez exécuter Curl à partir d’un autre pod du cluster pour avoir accès à cette adresse IP. Par exemple, vous pouvez effectuer les opérations suivantes :

    1. Créez un fichier manifeste avec la configuration suivante. Vous pouvez ajuster le dnsPolicy en fonction de vos besoins. Pour plus d’informations, consultez DNS pour services et pods.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Créez le pod.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Vérifiez que le pod est en cours d’exécution.

          kubectl get pod test-pod
      
    4. Démarrer une session shell à partir du conteneur

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

    À ce stade, vous disposez d’une session d’interpréteur de commandes qui provient d’un conteneur en cours d’exécution dans le cluster à partir duquel vous pouvez exécuter la commande Curl décrite dans une étape précédente.

    Notes

    Pour savoir comment envoyer des événements cloud en utilisant des langages de programmation, consultez les exemples suivants :

Vérifier dans la visionneuse Event Grid

Vous avez déclenché l’événement, et Event Grid a envoyé le message au point de terminaison configuré lors de l’abonnement. Affichez votre application web pour voir l’événement que vous venez d’envoyer.

Voir un événement reçu dans la visionneuse Event Grid

Étapes suivantes

Voir les articles suivants :