Recevoir les événements directs depuis Cloud Storage (gcloud CLI)

Ce guide de démarrage rapide explique comment recevoir des événements directs à partir de Cloud Storage (sans utiliser Cloud Audit Logs) dans un service Cloud Run non authentifié à l'aide d'Eventarc.

Vous pouvez configurer le déclenchement des notifications en réponse à divers événements ayant lieu au sein d'un bucket Cloud Storage : création, suppression et archivage d'objets, ainsi que mises à jour de métadonnées. Pour en savoir plus, consultez la page Créer un déclencheur pour acheminer des événements Cloud Storage vers Cloud Run.

Dans le cadre de ce guide démarrage rapide, vous allez effectuer les étapes suivantes :

  1. Créer un bucket Cloud Storage qui servira de source d'événements.

  2. Déployer un service récepteur d'événements sur Cloud Run.

  3. Créer un déclencheur Eventarc.

  4. Générer un événement en important un fichier dans le bucket Cloud Storage et l'afficher dans les journaux Cloud Run.

Avant de commencer

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Installez Google Cloud CLI.
  7. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  8. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  9. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  10. Activez les API Cloud Build, Cloud Run, Cloud Storage, Eventarc et Pub/Sub.

    gcloud services enable \
    cloudbuild.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    run.googleapis.com \
    storage.googleapis.com
  11. Mettez à jour les composants gcloud :
    gcloud components update
  12. Connectez-vous à votre compte :
    gcloud auth login
  13. Définissez les variables de configuration utilisées dans ce guide de démarrage rapide :
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  14. Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

    Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

  15. Le compte de service Compute Engine par défaut est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud utilisant Compute Engine.

    À des fins de test, vous pouvez associer ce compte de service à un déclencheur Eventarc pour représenter l'identité du déclencheur. Notez le format de l'adresse e-mail à utiliser lors de la création d'un déclencheur :

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Le compte de service Compute Engine dispose automatiquement du rôle de base Éditeur (roles/editor) sur votre projet. Toutefois, si les attributions automatiques de rôles ont été désactivées, consultez les instructions Rôles et autorisations applicables pour créer un compte de service et lui accorder les rôles requis.

  16. Attribuez le rôle Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service Compute Engine par défaut afin que le déclencheur Eventarc puisse recevoir des événements en provenance des fournisseurs d'événements
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  17. Avant de créer un déclencheur pour des événements directs à partir de Cloud Storage, attribuez le rôle Éditeur Pub/Sub (roles/pubsub.publisher) à l'agent de service Cloud Storage, un compte de service géré par Google :

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    
  18. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) au compte de service géré par Google pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  19. Téléchargez et installez l'outil de gestion du code source Git.

Créer un bucket Cloud Storage

Créez un bucket Cloud Storage qui servira de source d'événements :
gsutil mb -l us-central1 gs://PROJECT_ID-bucket/

Une fois la source d'événements créée, vous pouvez déployer le service récepteur d'événements sur Cloud Run.

Déployer le service récepteur d'événements sur Cloud Run

Déployez un service Cloud Run qui reçoit et consigne les événements.

  1. Clonez le dépôt, puis accédez au répertoire contenant l'exemple de code Cloud Run :

    Go

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

    Java

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

    .NET

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

    Node.js

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

    Python

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

     gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
    
  3. Déployez l'image de conteneur dans Cloud Run :

     gcloud run deploy helloworld-events \
         --image gcr.io/PROJECT_ID/helloworld-events \
         --allow-unauthenticated
    

    Une fois le déploiement effectué, la ligne de commande affiche l'URL du service.

    Maintenant que vous avez déployé votre service récepteur d'événements appelé helloworld-events sur Cloud Run, vous pouvez configurer votre déclencheur.

Créer un déclencheur Eventarc

Le déclencheur Eventarc envoie des événements à partir du bucket Cloud Storage vers le service Cloud Run helloworld-events.

  1. Créez un déclencheur filtrant les événements Cloud Storage et qui utilisent le compte de service Compute Engine par défaut :

     gcloud eventarc triggers create storage-events-trigger \
         --destination-run-service=helloworld-events \
         --destination-run-region=us-central1 \
         --event-filters="type=google.cloud.storage.object.v1.finalized" \
         --event-filters="bucket=PROJECT_ID-bucket" \
         --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Cette action crée un déclencheur appelé storage-events-trigger.

    Notez que lorsque vous créez un déclencheur Eventarc pour la première fois dans un projet Google Cloud, le provisionnement de l'agent de service Eventarc peut prendre quelques instants. Ce problème peut généralement être résolu en essayant à nouveau de créer le déclencheur. Pour en savoir plus, consultez Erreurs d'autorisation refusée.

  2. Pour vérifier que storage-events-trigger a bien été créé, exécutez la commande suivante :

     gcloud eventarc triggers list --location=us-central1
    

    Le résultat ressemble à ce qui suit :

     NAME                    TYPE                                      DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
     storage-events-trigger  google.cloud.storage.object.v1.finalized  helloworld-events                              Yes
    

Générer et afficher un événement

  1. Pour générer un événement, importez un fichier texte dans Cloud Storage :

     echo "Hello World" > random.txt
     gsutil cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    L'importation génère un événement, et le service Cloud Run consigne le message de l'événement.

  2. Pour afficher l'entrée de journal, filtrez les entrées de journal et renvoyez la sortie au format JSON :

    gcloud logging read 'textPayload: "Detected change in Cloud Storage bucket"'
    
  3. Recherchez une entrée de journal semblable à ceci :

    "textPayload": "2021/08/09 19:04:25 Detected change in Cloud Storage bucket: objects/random.txt"
    

Félicitations ! Vous venez de déployer un service récepteur d'événements sur Cloud Run, de créer un déclencheur Eventarc, de générer un événement à partir de Cloud Storage et de l'afficher dans les journaux Cloud Run.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

Bien que Cloud Run ne facture pas un service inutilisé, il se peut que des frais vous soient toujours facturés pour le stockage de l'image de conteneur dans Container Registry, le stockage des fichiers dans votre bucket Cloud Storage, et lesRessources Eventarc.

Vous pouvez :

  1. Supprimer votre image.

  2. Supprimer votre bucket de stockage.

  3. Supprimer le déclencheur Eventarc.

Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

Supprimez un projet Google Cloud :

gcloud projects delete PROJECT_ID

Étapes suivantes