1. Introduction

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.

Eventarc permet de connecter facilement différents services (Cloud Run, Cloud Functions, Workflows) à des é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 Eventarc. Plus précisément, vous allez écouter les événements provenant de Pub/Sub, Cloud Storage et Cloud Audit Logs avec Eventarc, puis les transmettre à un service Cloud Run.
Points abordés
- Vision d'Eventarc
- Découvrir les événements dans Eventarc
- Créer un récepteur Cloud Run
- Créer un déclencheur pour Pub/Sub
- Créer un déclencheur pour Cloud Storage
- Créer un déclencheur pour Cloud Audit Logs
- Explorer l'interface utilisateur d'Eventarc
2. Vision d'Eventarc
Eventarc vise à fournir des événements provenant de diverses sources d'événements Google, Google Cloud et tierces à des destinations d'événements Google Cloud.

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 |
Sources tierces | Sources d'événements qui n'appartiennent pas à Google et qui ne sont pas produites par les clients. Cela inclut les sources d'événements populaires telles que Check Point CloudGuard, Datadog, ForgeRock, Lacework, etc., qui appartiennent à des fournisseurs et partenaires tiers 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.
3. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google 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.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google, et que vous pouvez modifier à 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). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme
PROJECT_ID), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé. - La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. 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 :

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

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.
Avant de commencer
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré :
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. Déployer un service Cloud Run
déployer un service Cloud Run pour recevoir des événements ; Vous allez déployer le conteneur Hello de Cloud Run qui enregistre le contenu des CloudEvents.
Tout d'abord, activez les services requis pour Cloud Run :
gcloud services enable run.googleapis.com
Déployez le conteneur "hello" sur Cloud Run :
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
En cas de réussite, la ligne de commande affiche l'URL du service. Vous pouvez ouvrir l'URL du service dans une fenêtre de navigateur pour vérifier que le service est bien déployé.
5. Découverte d'événements
Avant de créer des déclencheurs dans Eventarc, vous pouvez découvrir les sources d'événements, les types d'événements qu'elles peuvent émettre et comment configurer les déclencheurs pour les consommer.
Pour afficher la liste des différents types d'événements :
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
Pour en savoir plus sur chaque type d'événement :
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
Pour afficher la liste des services qui émettent un certain type d'événement :
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
Pour afficher la liste des noms de méthodes (sous-événements) que chaque service peut émettre :
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. Créer un déclencheur Pub/Sub
Pour recevoir des événements, l'un des moyens possibles consiste à passer par Cloud Pub/Sub. Toute application peut publier des messages dans Pub/Sub, et ces messages peuvent être transmis à Cloud Run via Eventarc.
Configuration
Avant de créer des déclencheurs, activez les services requis pour Eventarc :
gcloud services enable eventarc.googleapis.com
Vous avez également besoin d'un compte de service à utiliser par les déclencheurs. Créez un compte de service :
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
Créer
Créez un déclencheur pour filtrer les événements publiés dans le sujet Pub/Sub et les envoyer à notre service Cloud Run déployé :
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
Le déclencheur Pub/Sub crée un sujet en arrière-plan. Découvrons-le et attribuons-le à une variable :
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
Utilisez gcloud pour publier un message dans le sujet :
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
Le service Cloud Run enregistre le corps du message entrant. Vous pouvez le voir dans la section "Journaux" de votre instance Cloud Run :

Créer avec un sujet Pub/Sub existant
Par défaut, lorsque vous créez un déclencheur Pub/Sub, Eventarc crée un sujet en arrière-plan que vous pouvez utiliser comme sujet de transport entre votre application et un service Cloud Run. Cela permet de créer facilement et rapidement un déclencheur basé sur Pub/Sub, mais vous pouvez parfois utiliser un sujet existant. Eventarc vous permet de spécifier un sujet Pub/Sub existant dans le même projet avec l'indicateur gcloud --transport-topic.
Pour voir comment cela fonctionne, créez un sujet Pub/Sub à utiliser comme sujet de transport :
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
Créez un déclencheur :
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Vous pouvez tester le déclencheur en envoyant un message au sujet :
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. Créer un déclencheur Cloud Storage
Dans cette étape, vous allez créer un déclencheur pour écouter les événements de Cloud Storage.
Configuration
Commencez par créer un bucket pour recevoir les événements :
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
Attribuez le rôle eventarc.eventReceiver afin que le compte de service puisse être utilisé dans un déclencheur Cloud Storage :
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Vous devez également ajouter le rôle pubsub.publisher au compte de service Cloud Storage pour les déclencheurs Cloud Storage :
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
Créer
Créez un déclencheur pour acheminer les événements de création de fichiers du bucket vers votre service :
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
Affichez la liste de tous les déclencheurs pour vérifier que le déclencheur a bien été créé :
gcloud eventarc triggers list
Importez un fichier 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 :

8. Créer un déclencheur Cloud Audit Logs
Bien que le déclencheur Cloud Storage soit la meilleure façon d'écouter les événements Cloud Storage, vous allez créer un déclencheur Cloud Audit Logs pour faire de même.
Configuration
Pour recevoir des événements d'un service, vous devez activer Cloud Audit Logs. Dans la console Cloud, sélectionnez IAM & Admin et Audit Logs dans le menu en haut à gauche. Dans la liste des services, cochez Google Cloud Storage :

Sur la droite, assurez-vous que Admin, Read et Write sont sélectionnés, puis cliquez sur Save :

Créer
Créez un déclencheur pour acheminer les événements de création de fichiers du bucket vers votre service :
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
L'initialisation des déclencheurs de journaux d'audit prend un peu de temps. Vous pouvez vérifier que le déclencheur a été créé en listant tous les déclencheurs :
gcloud eventarc triggers list
Vous devriez voir que le champ ACTIVE est défini sur Yes :
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
Importez le même fichier dans le bucket Cloud Storage que précédemment :
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 :

9. Explorer l'interface utilisateur d'Eventarc
Dans cette étape, vous allez explorer l'interface utilisateur Eventarc dans la console Google Cloud. Dans l'UI Eventarc, vous pouvez obtenir un aperçu de tous les déclencheurs, les modifier et les supprimer, et en créer d'autres à partir de la console Google Cloud.
Accédez à la section Eventarc de Google Cloud :

La liste des déclencheurs que vous avez créés précédemment s'affiche :

Si vous cliquez sur un déclencheur, vous pouvez afficher ses détails, le modifier ou le supprimer :

Vous pouvez également créer un déclencheur en sélectionnant Create trigger et en saisissant les détails du déclencheur :

10. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Vision d'Eventarc
- Découvrir les événements dans Eventarc
- Créer un récepteur Cloud Run
- Créer un déclencheur pour Pub/Sub
- Créer un déclencheur pour Cloud Storage
- Créer un déclencheur pour Cloud Audit Logs
- Explorer l'interface utilisateur d'Eventarc