Atelier de programmation sur les événements pour Cloud Run for Anthos

1. Introduction

6a5cf23c8e20491f.png

Cloud Run vous permet d'exécuter des conteneurs sans état dans un environnement entièrement géré. La plate-forme étant basée sur Knative, vous pouvez exécuter vos conteneurs soit de façon entièrement gérée avec Cloud Run, soit dans votre cluster Google Kubernetes Engine avec Cloud Run pour Anthos.

Events for Cloud Run for Anthos permet de connecter facilement les services Cloud Run aux événements provenant de diverses sources. Il vous permet de créer des architectures basées sur des événements dans lesquelles les microservices sont faiblement couplés et distribués. Il gère également l'ingestion, la diffusion, la sécurité, l'autorisation et le traitement des erreurs pour vous, ce qui améliore l'agilité des développeurs et la résilience des applications.

Dans cet atelier de programmation, vous allez découvrir les événements pour Cloud Run pour Anthos. Plus précisément, vous allez écouter les événements provenant de Cloud Pub/Sub, des journaux d'audit, de Cloud Storage et de Cloud Scheduler, et apprendre à produire et consommer des événements personnalisés.

Points abordés

  • Vision à long terme des événements pour Cloud Run for Anthos
  • État actuel des événements pour Cloud Run pour Anthos
  • Créer un récepteur Cloud Run
  • Créer un déclencheur d'événement pour Cloud Pub/Sub
  • Créer un déclencheur d'événement pour les journaux d'audit
  • Créer un déclencheur d'événement pour Cloud Storage
  • Créer un déclencheur d'événement pour Cloud Scheduler
  • Produire et consommer des événements personnalisés

2. Vision à long terme

Lorsque nous adoptons une architecture sans serveur, les événements font partie intégrante de la façon dont les microservices découplés communiquent. Events for Cloud Run for Anthos fait des événements un élément essentiel de l'offre Cloud Run for Anthos, ce qui facilite la création d'applications sans serveur axées sur les événements.

Events for Cloud Run for Anthos permet une diffusion d'événements asynchrone fiable, sécurisée et évolutive à partir de sources d'événements packagées ou créées par des applications vers des consommateurs sur cluster et hors cluster.

ce389bcafba6d669.png

Sources Google Cloud

Sources d'événements qui sont des produits appartenant à Google Cloud

Sources Google

Sources d'événements appartenant à Google, telles que Gmail, Hangouts, la gestion Android, etc.

Sources personnalisées

Sources d'événements qui ne sont pas des produits Google et qui sont créées par les utilisateurs finaux eux-mêmes. Il peut s'agir de sources Knative développées par l'utilisateur ou de toute autre application exécutée sur le cluster et capable de générer un événement Cloud.

Sources tierces

Sources d'événements qui n'appartiennent ni à Google ni à l'utilisateur final. Cela inclut les sources d'événements populaires telles que GitHub, SAP, Datadog, Pagerduty, etc., qui appartiennent à des fournisseurs tiers, des partenaires ou des communautés OSS et sont gérées par eux.

Les événements sont normalisés au format CloudEvents v1.0 pour l'interopérabilité entre les services. CloudEvents est une spécification ouverte et indépendante des fournisseurs qui décrit les données d'événement dans des formats courants, ce qui permet l'interopérabilité entre les services, les plates-formes et les systèmes.

Events for Cloud Run est conforme à Knative Eventing et permet la portabilité des conteneurs vers et depuis d'autres implémentations basées sur Knative. Cela fournit un framework cohérent et indépendant du cloud pour connecter de manière déclarative les producteurs d'événements aux consommateurs d'événements.

3. État actuel

Cet aperçu est la première version qui fournit un ensemble initial de fonctionnalités à long terme.

b1dd0d8a73185b95.png

Pour permettre aux utilisateurs de créer des applications sans serveur basées sur des événements, nous nous concentrons initialement sur deux aspects :

  1. Fournir un vaste écosystème de sources Google Cloud qui permet aux services Cloud Run du cluster Anthos de réagir aux événements des services Google Cloud.
  • Au départ, les événements provenant de sources Google Cloud sont fournis par le biais de journaux d'audit Cloud (CAL), ce qui permet d'utiliser un large éventail de sources d'événements. La latence et la disponibilité de la diffusion des événements provenant de ces sources sont liées à celles de Cloud Audit Logs. Chaque fois qu'un événement provenant d'une source Google Cloud est publié, une entrée Cloud Audit Logs correspondante est créée.
  • En plus des journaux d'audit Cloud, vous bénéficiez d'une assistance de premier ordre pour consommer des événements provenant de Cloud Storage, Cloud Pub/Sub et Cloud Scheduler. Nous continuerons à étendre cet écosystème de sources en ajoutant d'autres sources de premier ordre à mesure que nous en apprendrons davantage sur les parcours utilisateur et les commentaires.
  1. Permettez aux applications et services destinés aux utilisateurs finaux d'émettre des événements personnalisés en les publiant sur une URL de broker locale au cluster et limitée à un espace de noms.

Le mécanisme de distribution sous-jacent utilise des sujets et des abonnements Cloud Pub/Sub visibles dans les projets des clients. Par conséquent, cette fonctionnalité offre les mêmes garanties de distribution que Cloud Pub/Sub.

Le déclencheur d'événements permet de s'abonner à des événements afin que ceux correspondant au filtre du déclencheur soient envoyés à la destination (ou au récepteur) vers laquelle pointe le déclencheur.

Tous les événements sont diffusés au format CloudEvents v1.0 pour l'interopérabilité entre les services.

Nous continuerons à vous proposer plus de valeur de manière itérative jusqu'à la disponibilité générale et au-delà.

4. Préparation

Configuration de l'environnement d'auto-formation

  1. Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Le nom du projet est celui que verront les participants au projet. Tant que vous respectez ses conventions de dénomination, vous pouvez utiliser ce que vous voulez et le mettre à jour à tout moment.
  • L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire ou essayer le vôtre pour voir s'il est disponible. Il est ensuite "gelé" une fois le projet créé.
  1. Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.

L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.

5. Activer les API, définir la zone et la plate-forme

Configurer l'ID du projet et installer les composants alpha

Dans Cloud Shell, GOOGLE_CLOUD_PROJECT devrait déjà être défini sur l'ID de votre projet. Si ce n'est pas le cas, assurez-vous qu'il est défini et que votre gcloud est configuré avec cet ID de projet :

export GOOGLE_CLOUD_PROJECT=your-project-id
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

Assurez-vous que le composant gcloud pour la version alpha est installé :

gcloud components install alpha

Activer les API

Activez tous les services nécessaires :

gcloud services enable cloudapis.googleapis.com 
gcloud services enable container.googleapis.com 
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Définir la zone et la plate-forme

Avant de créer un cluster GKE avec Cloud Run Events, définissez le nom du cluster, la zone et la plate-forme. Par exemple, nous définissons ici le nom et la zone sur events-cluster et europe-west1-b, et la plate-forme sur gke,.

Dans Cloud Shell :

export CLUSTER_NAME=events-cluster
export CLUSTER_ZONE=europe-west1-b

gcloud config set run/cluster ${CLUSTER_NAME}
gcloud config set run/cluster_location ${CLUSTER_ZONE}
gcloud config set run/platform gke

Vous pouvez vérifier que la configuration est définie :

gcloud config list

...
[run]
cluster = events-cluster
cluster_location = europe-west1-b
platform = gke

6. Créer un cluster GKE avec Cloud Run Events

Créez un cluster GKE exécutant Kubernetes >= 1.15.9-gke.26, avec les modules complémentaires suivants activés : CloudRun, HttpLoadBalancing, HorizontalPodAutoscaling :

gcloud beta container clusters create ${CLUSTER_NAME} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=3 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=3 --image-type=cos \
  --enable-stackdriver-kubernetes \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone ${CLUSTER_ZONE} \
  --release-channel=rapid

7. Configurer les événements Cloud Run (plan de contrôle)

Les événements Cloud Run comportent un plan de contrôle et un plan de données qui doivent être configurés séparément. Pour configurer le plan de contrôle :

Dans Cloud Shell :

gcloud beta events init 

Cela initialisera l'événement et créera également le nombre de comptes de service nécessaires. Assurez-vous de sélectionner "Oui" lorsque vous êtes invité à créer un compte de service.

À ce stade, le plan de contrôle doit être correctement initialisé. Vous devriez voir quatre pods avec un

Running, 2 (controller-xxx-xxx et webhook-xxx-xxx) dans l'espace de noms cloud-run-events et 2 (eventing-controller-xxx-xxx et eventing-webhook-xxx-xxx) dans l'espace de noms knative-eventing. Vous pouvez le vérifier en exécutant les commandes suivantes :

kubectl get pods -n cloud-run-events

NAME                         READY   STATUS    RESTARTS   AGE
controller-9cc679b67-2952n   1/1     Running   0          22s
webhook-8576c4cfcb-dhz82     1/1     Running   0          16m
kubectl get pods -n knative-eventing

NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-77f46f6cf8-kj9ck   1/1     Running   0          17m
eventing-webhook-5bc787965f-hcmwg      1/1     Running   0          17m

8. Configurer les événements Cloud Run (plan de données)

Ensuite, configurez le plan de données dans les espaces de noms utilisateur. Cela crée un broker avec les autorisations appropriées pour lire et écrire dans Pub/Sub.

Dans Cloud Shell, définissez une variable d'environnement NAMESPACE pour l'espace de noms que vous souhaitez utiliser pour vos objets. Vous pouvez le définir sur default si vous souhaitez utiliser l'espace de noms par défaut, comme indiqué ci-dessous :

export NAMESPACE=default

Notez que si l'espace de noms spécifié n'existe pas (c'est-à-dire qu'il n'est pas défini par défaut), vous devez le créer :

kubectl create namespace ${NAMESPACE}

Initialisez l'espace de noms avec le secret par défaut :

gcloud beta events namespaces init ${NAMESPACE} --copy-default-secret 

Créez un courtier par défaut dans l'espace de noms :

gcloud beta events brokers create default --namespace ${NAMESPACE}

Vérifiez que le courtier a été créé. Notez que l'agent peut mettre quelques secondes à être prêt :

kubectl get broker -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-brokercell-ingress.cloud-run-events.svc.cluster.local/default/default

9. Découverte d'événements

Vous pouvez découvrir les sources enregistrées, les types d'événements qu'elles peuvent émettre et comment configurer des déclencheurs pour les utiliser.

Pour afficher la liste des différents types d'événements :

gcloud beta events types list

Pour en savoir plus sur chaque type d'événement :

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

10. Créer un récepteur Cloud Run

En tant que récepteur d'événements, déployez un service Cloud Run qui consigne le contenu du CloudEvent qu'il reçoit.

Vous pouvez utiliser event_display de Knative, qui est déjà compilé et dont l'image de conteneur est créée dans le cadre de la version Knative. Vous pouvez consulter les détails de l'image de conteneur dans event-display.yaml :

...
containers:
  - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

Déployer sur Cloud Run

Déployez votre application conteneurisée sur Cloud Run :

export SERVICE_NAME=event-display
gcloud run deploy ${SERVICE_NAME} \
  --namespace=${NAMESPACE} \
  --image gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

En cas de réussite, la ligne de commande affiche l'URL du service. Vous pouvez maintenant accéder au conteneur déployé en ouvrant l'URL du service dans une fenêtre de navigateur quelconque.

11. Créer un déclencheur d'événement pour Cloud Pub/Sub

Pour recevoir des événements, l'un des moyens possibles consiste à passer par Cloud Pub/Sub. Les applications personnalisées peuvent publier des messages dans Cloud Pub/Sub, et ces messages peuvent être transmis aux récepteurs Google Cloud Run par le biais d'Events pour Cloud Run.

Créer un sujet

Commencez par créer un sujet Cloud Pub/Sub. Vous pouvez remplacer TOPIC_ID par un nom de sujet unique de votre choix :

export TOPIC_ID=cr-gke-topic
gcloud pubsub topics create ${TOPIC_ID}

Créer un déclencheur

Avant de créer le déclencheur, obtenez plus de détails sur les paramètres dont vous aurez besoin afin de créer un déclencheur pour les événements provenant de Cloud Pub/Sub :

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

Créez un déclencheur pour filtrer les événements publiés dans le sujet Cloud Pub/Sub et les envoyer à notre service Cloud Run déployé :

gcloud beta events triggers create trigger-pubsub \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type google.cloud.pubsub.topic.v1.messagePublished \
  --parameters topic=${TOPIC_ID}

Tester le déclencheur

Vous pouvez vérifier que le déclencheur a été créé en listant tous les déclencheurs :

gcloud beta events triggers list

Vous devrez peut-être attendre jusqu'à 10 minutes pour que la création du déclencheur se propage et que celui-ci commence à filtrer les événements.

Pour simuler l'envoi d'un message par une application personnalisée, vous pouvez utiliser gcloud pour déclencher un événement :

gcloud pubsub topics publish ${TOPIC_ID} --message="Hello there"

Le récepteur Cloud Run que nous avons créé enregistre le corps du message entrant. Vous pouvez le voir dans la section "Journaux" de votre instance Cloud Run :

9526909a06c6d4f4.png

Notez que "Hello there" sera encodé en base64, car il a été envoyé par Pub/Sub. Vous devrez le décoder si vous souhaitez voir le message d'origine.

Supprimer le déclencheur

Une fois les tests terminés, vous pouvez éventuellement supprimer le déclencheur.

gcloud beta events triggers delete trigger-pubsub --namespace ${NAMESPACE}

12. Créer un déclencheur d'événement pour les journaux d'audit

Vous allez configurer un déclencheur pour écouter les événements des journaux d'audit. Plus précisément, vous rechercherez les événements de création de sujets Pub/Sub dans les journaux d'audit.

Activer les journaux d'audit

Pour recevoir des événements d'un service, vous devez activer les journaux d'audit. Dans la console Cloud, sélectionnez IAM & Admin > Audit Logs dans le menu en haut à gauche. Dans la liste des services, cochez Google Cloud Pub/Sub :

97bd4b57c6a05fcc.png

Sur la droite, assurez-vous que les options "Admin", "Lecture" et "Écriture" sont sélectionnées. Cliquez sur "Enregistrer" :

bec31b4f35fbcea.png

Tester les journaux d'audit

Pour apprendre à identifier les paramètres, vous allez devoir configurer un déclencheur et effectuer une véritable opération.

Par exemple, créez un sujet Pub/Sub :

gcloud pubsub topics create cre-gke-topic1

Voyons maintenant quel type de journal d'audit cette mise à jour a généré. Dans la console Cloud, sélectionnez Logging > Logs Viewer dans le menu en haut à gauche.

Sous Query Builder,, sélectionnez Cloud Pub/Sub Topic, puis cliquez sur Add :

f5c634057e935bc6.png

Une fois la requête exécutée, vous verrez les journaux des sujets Pub/Sub. L'un d'eux devrait être google.pubsub.v1.Publisher.CreateTopic :

b083cce219773d24.png

Notez les valeurs de serviceName, methodName et resourceName. Nous les utiliserons pour créer le déclencheur.

Créer un déclencheur

Vous êtes maintenant prêt à créer un déclencheur d'événement pour les journaux d'audit.

Pour obtenir plus d'informations sur les paramètres dont vous aurez besoin pour créer un déclencheur pour les événements provenant de sources Google Cloud, exécutez la commande suivante :

gcloud beta events types describe google.cloud.audit.log.v1.written

Créez le déclencheur avec les bons filtres :

gcloud beta events triggers create trigger-auditlog \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.audit.log.v1.written \
  --parameters serviceName=pubsub.googleapis.com \
  --parameters methodName=google.pubsub.v1.Publisher.CreateTopic

Tester le déclencheur

Affichez la liste de tous les déclencheurs pour vérifier que le déclencheur a bien été créé :

gcloud beta events triggers list

Attendez que la création du déclencheur se propage et que celui-ci commence à filtrer les événements (ce processus peut prendre 10 minutes). Une fois prêt, il filtrera les événements de création et les enverra au service. Vous êtes maintenant prêt à déclencher un événement.

Créez un autre sujet Pub/Sub, comme vous l'avez fait précédemment :

gcloud pubsub topics create cre-gke-topic2

Si vous consultez les journaux du service Cloud Run dans la console Cloud, l'événement reçu devrait s'afficher :

aff3b2e7ad05c75d.png

Supprimer le déclencheur et les thèmes

Une fois les tests terminés, vous pouvez supprimer le déclencheur :

gcloud beta events triggers delete trigger-auditlog

Supprimer également les thèmes suivants :

gcloud pubsub topics delete cre-gke-topic1 cre-gke-topic2

13. Créer un déclencheur d'événement pour Cloud Storage

Vous allez configurer un déclencheur pour écouter les événements de Cloud Storage.

Créer un bucket

Commencez par créer un bucket Cloud Storage dans la même région que le service Cloud Run déployé. Vous pouvez remplacer BUCKET_NAME par un nom unique de votre choix :

export BUCKET_NAME=[new bucket name]
export REGION=europe-west1

gsutil mb -p $(gcloud config get-value project) \
  -l $REGION \
  gs://$BUCKET_NAME/

Configurer les autorisations Cloud Storage

Avant de créer un déclencheur, vous devez autoriser le compte de service par défaut pour Cloud Storage à publier sur Pub/Sub.

Tout d'abord, vous devez trouver le compte de service que Cloud Storage utilise pour publier sur Pub/Sub. Vous pouvez suivre les étapes décrites dans Obtenir le compte de service Cloud Storage pour obtenir le compte de service ou utiliser la commande suivante :

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://storage.googleapis.com/storage/v1/projects/$(gcloud config get-value project)/serviceAccount"

Le compte de service doit être listé sous email_address.

En supposant que le compte de service que vous avez trouvé ci-dessus soit service-XYZ@gs-project-accounts.iam.gserviceaccount.com, définissez-le sur une variable d'environnement :

export GCS_SERVICE_ACCOUNT=service-XYZ@gs-project-accounts.iam.gserviceaccount.com

Ensuite, accordez à ce compte de service les droits de publication sur Pub/Sub :

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member=serviceAccount:${GCS_SERVICE_ACCOUNT} \
  --role roles/pubsub.publisher

Créer un déclencheur

Vous êtes maintenant prêt à créer un déclencheur d'événement pour les événements Cloud Storage.

Obtenez plus de détails sur les paramètres dont vous aurez besoin pour créer le déclencheur :

gcloud beta events types describe google.cloud.storage.object.v1.finalized

Créez le déclencheur avec les bons filtres :

gcloud beta events triggers create trigger-storage \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.storage.object.v1.finalized \
  --parameters bucket=${BUCKET_NAME}

Tester le déclencheur

Affichez la liste de tous les déclencheurs pour vérifier que le déclencheur a bien été créé :

gcloud beta events triggers list

Attendez que la création du déclencheur se propage et que celui-ci commence à filtrer les événements (ce processus peut prendre 10 minutes). Une fois prêt, il filtrera les événements de création et les enverra au service.

Vous êtes maintenant prêt à déclencher un événement.

Importez un fichier aléatoire dans le bucket Cloud Storage :

echo "Hello World" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}/random.txt

Si vous consultez les journaux du service Cloud Run dans la console Cloud, l'événement reçu devrait s'afficher :

aff3b2e7ad05c75d.png

Supprimer le déclencheur

Une fois les tests terminés, vous pouvez supprimer le déclencheur :

gcloud beta events triggers delete trigger-storage

14. Créer un déclencheur d'événement pour Cloud Scheduler

Vous allez configurer un déclencheur pour écouter les événements de Cloud Scheduler.

Créer une application App Engine

Cloud Scheduler exige actuellement que les utilisateurs créent une application App Engine. Sélectionnez un emplacement App Engine et créez l'application :

export APP_ENGINE_LOCATION=europe-west
gcloud app create --region=${APP_ENGINE_LOCATION}

Créer un déclencheur

Pour obtenir plus d'informations sur les paramètres dont vous aurez besoin pour créer un déclencheur pour les événements provenant de sources Google Cloud, exécutez la commande suivante :

gcloud beta events types describe google.cloud.scheduler.job.v1.executed

Choisissez un emplacement Cloud Scheduler pour créer le planificateur :

export SCHEDULER_LOCATION=europe-west1

Créez un déclencheur qui créera une tâche à exécuter toutes les minutes dans Google Cloud Scheduler et appellera le service cible :

gcloud beta events triggers create trigger-scheduler \
  --namespace ${NAMESPACE} \
  --target-service=${SERVICE_NAME} \
  --type=google.cloud.scheduler.job.v1.executed \
  --parameters location=${SCHEDULER_LOCATION} \
  --parameters schedule="* * * * *" \
  --parameters data="trigger-scheduler-data"

Tester le déclencheur

Affichez la liste de tous les déclencheurs pour vérifier que le déclencheur a bien été créé :

gcloud beta events triggers list

Attendez que la création du déclencheur se propage et que celui-ci commence à filtrer les événements (ce processus peut prendre 10 minutes). Une fois prêt, il filtrera les événements de création et les enverra au service.

Si vous consultez les journaux du service Cloud Run dans la console Cloud, vous devriez voir l'événement reçu.

Supprimer le déclencheur

Une fois les tests terminés, vous pouvez supprimer le déclencheur :

gcloud beta events triggers delete trigger-scheduler

15. Événements personnalisés (point de terminaison du courtier)

Dans cette partie de l'atelier de programmation, vous allez produire et consommer des événements personnalisés à l'aide du Broker.

Créer un pod Curl pour générer des événements

Les événements sont généralement créés de manière programmatique. Toutefois, lors de cette étape, vous utiliserez curl pour envoyer manuellement des événements individuels et voir comment ces événements sont reçus par le bon consommateur.

Pour créer un pod qui sert de producteur d'événements, exécutez la commande suivante :

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
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
EOF

Vérifiez que le pod curl fonctionne correctement. Vous devriez voir un pod appelé curl avec Status=Running :

kubectl get pod curl -n ${NAMESPACE}

Créer un déclencheur

Vous allez créer un déclencheur avec un filtre sur le type CloudEvents spécifique (alpha-type dans ce cas) que vous allez émettre. Notez que vous pouvez utiliser un filtrage par mot clé exact sur un nombre illimité d'attributs CloudEvents et d'extensions. Si votre filtre définit plusieurs attributs, un événement doit comporter tous les attributs pour que le déclencheur puisse le filtrer. À l'inverse, si vous ne spécifiez pas de filtre, tous les événements seront reçus dans votre service.

Créez le déclencheur :

gcloud beta events triggers create trigger-custom \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=alpha-type \
  --custom-type

Tester le déclencheur

Affichez la liste de tous les déclencheurs pour vérifier que le déclencheur a bien été créé :

gcloud beta events triggers list

Créez un événement en envoyant une requête HTTP au Broker. Rappelez-vous l'URL du courtier en exécutant la commande suivante :

kubectl get brokers -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-broker.<NAMESPACE>.svc.cluster.local

Connectez-vous en SSH au pod curl que vous avez créé précédemment :

kubectl --namespace ${NAMESPACE} attach curl -it

Vous vous êtes connecté au pod via SSH et pouvez maintenant effectuer une requête HTTP. Une invite semblable à celle ci-dessous s'affiche :

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

Créez un événement :

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

Si l'événement a été reçu, vous recevrez une réponse HTTP 202 Accepted. Quittez la session SSH avec Ctrl + D.

Vérifiez que l'événement publié a été envoyé en consultant les journaux du service Cloud Run :

kubectl logs --selector serving.knative.dev/service=$SERVICE_NAME \
 -c user-container -n $NAMESPACE --tail=100

Supprimer le déclencheur

Une fois les tests terminés, vous pouvez supprimer le déclencheur :

gcloud beta events triggers delete trigger-custom

16. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Vision à long terme des événements pour Cloud Run for Anthos
  • État actuel des événements pour Cloud Run pour Anthos
  • Créer un récepteur Cloud Run
  • Créer un déclencheur d'événement pour Cloud Pub/Sub
  • Créer un déclencheur d'événement pour les journaux d'audit
  • Créer un déclencheur d'événement pour Cloud Storage
  • Créer un déclencheur d'événement pour Cloud Scheduler
  • Produire et consommer des événements personnalisés