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 Open Source Knative vous permet d'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 for Anthos.

cb762f29e9183a3f.png

Eventarc facilite la connexion de divers services (Cloud Run, Cloud Functions, Workfklows) à des événements provenant de sources diverses. Il vous permet de créer des architectures basées sur des événements dans lesquelles des microservices sont faiblement couplés et distribués. Il se charge également de l'ingestion, de la diffusion, de la sécurité, de l'autorisation et de la gestion des erreurs des événements 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 des événements provenant de Pub/Sub, de Cloud Storage et de 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 à diffuser des événements provenant de diverses sources d'événements Google, Google Cloud et tierces vers des destinations d'événements Google Cloud.

59b147dc030b2b0b.png

Sources Google Cloud

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

Sources Google

Sources d'événements qui sont des produits appartenant à Google, tels que Gmail, Hangouts, Android Management, 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 ne sont ni détenues par Google, ni produites par le client. Cela inclut les sources d'événements populaires telles que Check Point CloudGuard, Datadog, ForgeRock, Lacework, etc., qui sont détenues et gérées par des fournisseurs et partenaires tiers.

Les événements sont normalisés au format CloudEvents v1.0 pour une interopérabilité multiservice. CloudEvents est une spécification ouverte et neutre du point de vue du fournisseur, qui décrit les données d'événement dans des formats courants, ce qui permet une interopérabilité entre les services, plates-formes et 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 gratuit 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 consigne le contenu des événements CloudEvents.

Commencez par activer 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 n'importe quelle fenêtre de navigateur pour vérifier qu'il est maintenant déployé.

5. Découverte d'événements

Avant de créer des déclencheurs dans Eventarc, vous pouvez découvrir les sources des événements, les types d'événements qu'elles peuvent émettre et comment les configurer pour les utiliser.

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

Vous pouvez recevoir des événements via Cloud Pub/Sub. Toute application peut publier des messages dans Pub/Sub, qui peuvent être distribués à Cloud Run via Eventarc.

Configuration

Avant de créer des déclencheurs, activez les services requis pour Eventarc:

gcloud services enable eventarc.googleapis.com

Les déclencheurs doivent également disposer d'un compte de service. 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 sur 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 sous les couvertures. 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 consigne le corps du message entrant. Vous pouvez l'afficher 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 sous les couvertures un sujet que vous pouvez utiliser comme sujet de transport entre votre application et un service Cloud Run. Cela s'avère utile pour créer facilement et rapidement un déclencheur reposant 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 à l'aide de l'option 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

Au cours de cette étape, vous allez créer un déclencheur pour écouter les événements de Cloud Storage.

Configuration

Commencez par créer un bucket depuis lequel recevoir des événements:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Accordez 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

Répertoriez tous les déclencheurs pour vérifier qu'ils ont bien été créés:

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 Cloud Console, vous devriez voir l'événement reçu:

904cfc93bb8e8df1.png

8. Créer un déclencheur Cloud Audit Logs

Bien que le déclencheur Cloud Storage soit le meilleur moyen d'écouter des événements Cloud Storage, dans cette étape, vous allez créer un déclencheur Cloud Audit Logs pour en 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 bien été créé en listant tous les déclencheurs:

gcloud eventarc triggers list

Vous devriez constater que le champ ACTIVE présente la valeur 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 Cloud Console, vous devriez voir l'événement reçu:

7be7859bcc8976f8.png

9. Explorer l'interface utilisateur d'Eventarc

Au cours de cette étape, vous allez découvrir l'interface utilisateur d'Eventarc dans la console Google Cloud. L'interface utilisateur d'Eventarc vous permet d'obtenir un aperçu de tous les déclencheurs, de les modifier, de les supprimer et d'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 consulter 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 indiquant les détails le concernant:

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