Recevoir des événements personnalisés

Découvrez comment générer des événements personnalisés à l'aide de l'outil de ligne de commande curl, puis envoyez ces événements à un service dans Cloud Run pour Anthos sur Google Cloud.

Avant de commencer

Pour effectuer cette tâche, vous devez disposer d'un agent d'événements et savoir dans quel espace de noms il s'exécute. Découvrez comment configurer des événements pour Cloud Run pour Anthos et créer un agent d'événements.

Si vous disposez d'un agent d'événements en cours d'exécution, vous pouvez afficher l'espace de noms Kubernetes en exécutant la commande suivante :

kubectl get brokers -n NAMESPACE

Déployer un service récepteur d'événements Cloud Run pour Anthos sur Google Cloud

Déployez un service Cloud Run pour Anthos sur Google Cloud destiné à recevoir des événements de l'agent d'événements.

Pour déployer le service Cloud Run pour Anthos sur Google Cloud, procédez comme suit :

  1. Clonez le dépôt :

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    
  2. Créez le conteneur et importez-le dans Cloud Build :

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. Déployez l'image de conteneur dans Cloud Run pour Anthos sur Google Cloud :

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

Lorsque l'URL du service s'affiche, cela signifie que le déploiement a réussi.

Générer des événements à l'aide de cURL

Vous pouvez utiliser l'outil curl s'exécutant dans un pod Google Kubernetes Engine pour générer des événements :

  1. Créez un pod Google Kubernetes Engine dans l'espace de noms de votre agent d'événements :

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl
      name: curl
      namespace: NAMESPACE
    spec:
      containers:
      - image: radial/busyboxplus:curl
        imagePullPolicy: IfNotPresent
        name: curl
        stdin: true
        tty: true
    EOF
    

    NAMESPACE est le même espace de noms que celui de votre agent d'événements.

  2. Exécutez la commande suivante pour vérifier que le pod fonctionne correctement :

    kubectl get pod curl -n NAMESPACE
    

    NAMESPACE est le même espace de noms que celui de votre agent d'événements.

    Un pod opérationnel appelé "curl" devrait s'afficher ("Status=Running" indique qu'il est en cours d'exécution).

Créer un déclencheur pour votre agent d'événements

  1. Créez un déclencheur avec un filtre d'événements alpha-type :

    gcloud beta events triggers create TRIGGER_NAME \
        --namespace NAMESPACE \
        --target-service=CLOUD_RUN_SERVICE_NAME \
        --type=alpha-type \
        --custom-type
    

    NAMESPACE est le même espace de noms que celui de votre agent d'événements.

    Si vous ne spécifiez pas de filtre, tous les événements sont envoyés au service Cloud Run pour Anthos sur Google Cloud. Notez que vous pouvez utiliser un filtrage par mot clé exact sur un nombre illimité d'attributs et d'extensions CloudEvents. Si votre filtre définit plusieurs attributs, un événement doit correspondre à l'ensemble des attributs.

  2. Vérifiez que le déclencheur est configuré :

    gcloud beta events triggers list \
        --target-service 'CLOUD_RUN_SERVICE_NAME' \
        --namespace NAMESPACE
    

    NAMESPACE est le même espace de noms que celui de votre agent d'événements.

    Le résultat ressemble à ce qui suit :

    TRIGGER                  EVENT TYPE           TARGET
    trigger-name           alpha-type           cloud-run-service
    

Un déclencheur opérationnel [TRIGGER-NAME] doit s'afficher.

Créer un événement

Pour générer un événement, envoyez une requête HTTP à l'agent d'événements à partir du pod Google Kubernetes Engine.

  1. Obtenez l'URL de l'agent d'événements auquel la requête HTTP sera envoyée :

    kubectl get brokers default \
        --namespace NAMESPACE \
        --output jsonpath="{.status.address.url}"
    

    Notez l'URL de l'agent. Vous l'utiliserez pour envoyer la requête HTTP.

  2. Connectez-vous au pod en SSH :

    kubectl --namespace NAMESPACE attach curl -it
    
  3. À l'aide de curl, envoyez une requête HTTP dotée d'un en-tête HTTP Ce-Type: alpha-type afin d'obtenir une correspondance entre le filtre du déclencheur et l'agent d'événements. Dans cet exemple, le message est send-cloudevents-to-broker :

    curl -v "EVENT_BROKER_URL" \
        -X POST \
        -H "Ce-Id: my-id" \
        -H "Ce-Specversion: 1.0" \
        -H "Ce-Type: alpha-type" \
        -H "Ce-Subject: custom event" \
        -H "Ce-Source: my-source" \
        -H "Content-Type: application/json" \
        -d '{"msg":"send-cloudevents-to-broker"}'
    

    Cette opération génère un événement, et l'agent répond alors avec un code de réponse HTTP 202.

Afficher l'événement

Affichez l'événement en consultant les journaux du service destinataire Cloud Run pour Anthos sur Google Cloud :

  1. Pour afficher les journaux, saisissez la commande suivante :

    gcloud logging read "resource.type=k8s_container \
        resource.labels.namespace_name=events \
        resource.labels.container_name=user-container"
    

Nettoyer

Supprimez les ressources créées dans ce tutoriel pour éviter des frais récurrents.

  1. Supprimez le pod :

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. Supprimez le déclencheur :

    gcloud beta events triggers delete TRIGGER_NAME \
        --namespace >NAMESPACE