Déclencher Cloud Run avec des événements Eventarc

1. Introduction

894762ebb681671c.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.

cb762f29e9183a3f.png

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.

59b147dc030b2b0b.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

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

  1. 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.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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 :

55efc1aaa7a4d3ad.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 :

7ffe5cbb04455448.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.

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 :

69e0177e04a0d1af.png

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 :

904cfc93bb8e8df1.png

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 :

3c654597faed237c.png

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

1deb3ad78f11dd5f.png

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 :

7be7859bcc8976f8.png

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 :

81e139f17e0d29bf.png

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

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

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