Acheminer des événements Cloud Storage vers Cloud Run

Un déclencheur Eventarc déclare votre intérêt pour un événement ou un ensemble d'événements spécifique. Vous pouvez configurer le routage d'événements en spécifiant des filtres pour le déclencheur, y compris la source de l'événement et le service Cloud Run cible.

Eventarc fournit des événements au destinataire d'événements au format CloudEvents via une requête HTTP.

Ces instructions vous montrent comment configurer le routage d'événements vers votre service Cloud Run déclenché par un événement Cloud Storage direct. Pour en savoir plus, consultez la liste des événements directs compatibles.

Préparer la création d'un déclencheur

Avant de créer un déclencheur, procédez comme suit :

Console

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  2. Activez les API Cloud Logging, Eventarc et Eventarc Publishing.

    Activer les API

  3. Le cas échéant, activez l'API associée aux événements directs. Par exemple, pour les événements Cloud Storage, activez l'API Cloud Storage.

  4. Si vous n'en avez pas encore, créez un compte de service géré par l'utilisateur, puis accordez-lui les rôles et les autorisations nécessaires pour qu'Eventarc puisse gérer les événements de votre service cible.

    1. Dans la console Google Cloud, accédez à la page Créer un compte de service.

      Accéder à la page "Créer un compte de service"

    2. Sélectionnez votre projet.

    3. Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.

      Dans le champ Description du compte de service, saisissez une description. Exemple : Service account for event trigger.

    4. Cliquez sur Créer et continuer.

    5. Pour fournir un accès approprié, dans la liste Sélectionner un rôle, sélectionnez les rôles IAM (Identity and Access Management) requis à attribuer à votre compte de service pour les appels authentifiés ou non authentifiés. Pour en savoir plus, consultez la page Rôles et autorisations pour les cibles Cloud Run.

      Pour ajouter des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.

    6. Cliquez sur Continuer.

    7. Pour terminer la création du compte, cliquez sur OK.

  5. Accordez le rôle Diffuseur Pub/Sub à l'agent de service Cloud Storage. Il s'agit généralement de service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com. Vous pouvez récupérer l'adresse e-mail pour l'agent de service Cloud Storage.

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM

    2. Sur la ligne de l'agent de service Cloud Storage, cliquez sur Modifier le compte principal. (Si l'agent de service n'est pas répertorié, passez à l'étape suivante.) Le volet Modifier l'accès s'affiche.

      1. Cliquez sur Ajouter un autre rôle, puis recherchez le rôle Diffuseur Pub/Sub.
      2. Sélectionnez le rôle.
      3. Cliquez sur Enregistrer.
    3. Si l'agent de service n'est pas répertorié, cliquez sur Accorder l'accès. Le volet Accorder l'accès s'affiche.

      1. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.
      2. Dans la liste Sélectionner un rôle, recherchez le rôle Diffuseur Pub/Sub.
      3. Sélectionnez le rôle.
      4. Cliquez sur Enregistrer.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Activez les API Cloud Logging, Eventarc et Eventarc Publishing.

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com
    

  3. Le cas échéant, activez l'API associée aux événements directs. Par exemple, pour les événements Cloud Storage, activez storage.googleapis.com.

  4. Si vous n'en avez pas encore, créez un compte de service géré par l'utilisateur, puis accordez-lui les rôles et les autorisations nécessaires pour qu'Eventarc puisse gérer les événements de votre service cible.

    1. Créez le compte de service :

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      Remplacez SERVICE_ACCOUNT_NAME par le nom du compte de service. Il doit comporter entre 6 et 30 caractères alphanumériques pouvant inclure des minuscules et des tirets. Une fois le compte de service créé, vous ne pouvez pas en modifier le nom.

    2. Accordez les rôles ou autorisations Identity and Access Management (IAM) requis pour les appels authentifiés ou non authentifiés. Pour en savoir plus, consultez la page Rôles et autorisations pour les cibles Cloud Run.

  5. Attribuez le rôle pubsub.publisher au compte de service Cloud Storage :

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${SERVICE_ACCOUNT}" \
      --role="roles/pubsub.publisher"
    

Créer un déclencheur

Vous pouvez créer un déclencheur Eventarc à l'aide de Google Cloud CLI ou de la console Google Cloud.

Console

  1. Dans la console Google Cloud, accédez à la page Déclencheurs d'Eventarc.

    Accéder à la page "Déclencheurs"

  2. Cliquez sur Créer un déclencheur.
  3. Saisissez un nom de déclencheur

    Il s'agit de l'ID du déclencheur, qui doit commencer par une lettre. Il peut contenir jusqu'à 63 lettres minuscules, chiffres ou traits d'union.

  4. Pour le champ Type de déclencheur, sélectionnez Sources Google.
  5. Dans la liste Fournisseur d'événements, sélectionnez Cloud Storage.

    Notez que le nom du fournisseur d'événements utilisé dans la documentation Google Cloud associée peut ne pas avoir le préfixe Cloud ou Google Cloud. Par exemple, sur la console, Memorystore pour Redis est appelé Google Cloud Memorystore pour Redis.

  6. Dans la liste Type d'événement, sélectionnez un type d'événement parmi les événements directs :
    • google.cloud.storage.object.v1.archived : l'événement est envoyé lorsqu'une version en ligne d'un objet est archivée ou supprimée. Cet événement est uniquement envoyé pour les buckets avec gestion des versions.
    • google.cloud.storage.object.v1.delete : l'événement est envoyé lorsqu'un objet est définitivement supprimé. En fonction du paramètre de gestion des versions d'objet des buckets, cela signifie :
      • Pour les buckets avec gestion des versions, que celui-ci n'est envoyé que lorsqu'une version est définitivement supprimée (mais pas lorsqu'un objet est archivé).
      • Pour les buckets sans gestion de versions, que celui-ci est envoyé lorsqu'un objet est supprimé ou écrasé.
    • google.cloud.storage.object.v1.finalized : l'événement est envoyé lorsqu'un objet est créé (ou qu'un objet existant est écrasé et une nouvelle génération de cet objet est créée) dans le bucket.
    • google.cloud.storage.object.v1.metadataUpdated : l'événement est envoyé lorsque les [métadonnées](/storage/docs/metadata) d'un objet existant changent.
  7. Dans la liste Type de contenu des données d'événement, sélectionnez l'encodage de la charge utile de l'événement.

    Pour les événements directs de Cloud Storage, il doit s'agir de application/json.

  8. Spécifiez ou recherchez l'identifiant global unique du bucket Cloud Storage.

    Le bucket Cloud Storage doit se trouver dans le même projet Google Cloud et dans la même région ou emplacement multirégional que le déclencheur Eventarc.

  9. Sélectionnez une Région.

    Les déclencheurs Cloud Storage pour Eventarc sont disponibles dans les emplacements régionaux, birégionaux et multirégionaux. Notez que le bucket Cloud Storage doit se trouver dans le même projet Google Cloud et dans la même région ou emplacement multirégional que le déclencheur Eventarc.

    Les événements sont envoyés via des notifications Pub/Sub issues de Cloud Storage. Configurer trop de notifications enregistrées sur le même bucket peut entraîner le dépassement de la limite de notifications du bucket, comme indiqué par l'erreur Cloud Storage bucket ...: Pub/Sub notification limit reached. Le bucket peut comporter jusqu'à 10 configurations de notification déclenchant un événement spécifique. Consultez la page Quotas et limites pour Cloud Storage afin d'en savoir plus sur les quotas et les limites.

  10. Sélectionnez le compte de service qui appellera votre service ou workflow.

    Vous pouvez également créer un nouveau compte de service.

    Cela spécifie l'adresse e-mail du compte de service Identity and Access Management (IAM) associée au déclencheur et auquel vous avez précédemment attribué les rôles spécifiques requis par Eventarc.

  11. Dans la liste Destination de l'événement, sélectionnez Cloud Run.
  12. Sélectionner un service.

    Il s'agit du nom du service qui reçoit les événements du déclencheur. Le service doit se trouver dans le même projet que le déclencheur et recevoir des événements sous forme de requêtes HTTP POST envoyées à son chemin d'URL racine (/), à chaque déclenchement de l'événement.

  13. Vous pouvez éventuellement spécifier le Chemin de l'URL du service auquel envoyer la requête entrante.

    Il s'agit du chemin relatif sur le service de destination auquel les événements du déclencheur doivent être envoyés. Exemple : /, /route, route, route/subroute.

  14. Cliquez sur Créer.
  15. Une fois le déclencheur créé, vous ne pouvez plus modifier les filtres de source d'événement. À la place, vous devez créer un nouveau déclencheur et supprimer l'ancien. Pour en savoir plus, consultez la section Gérer les déclencheurs.

gcloud

Vous pouvez créer un déclencheur en exécutant une commande gcloud eventarc triggers create, associée aux options obligatoires et facultatives.

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="bucket=BUCKET" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Remplacez les éléments suivants :

  • TRIGGER : l'ID du déclencheur ou un identifiant complet.
  • LOCATION : l'emplacement du déclencheur Eventarc. Vous pouvez également définir la propriété eventarc/location (par exemple, gcloud config set eventarc/location us-central1).

    Le bucket Cloud Storage doit se trouver dans le même projet Google Cloud et dans la même région ou emplacement multirégional que le déclencheur Eventarc. Pour en savoir plus, consultez la page Emplacements Eventarc.

  • DESTINATION_RUN_SERVICE : nom du service Cloud Run qui reçoit les événements pour le déclencheur. Le service peut se trouver dans l'un des emplacements compatibles avec Cloud Run et ne doit pas nécessairement se trouver au même emplacement que le déclencheur. Cependant, le service doit se trouver dans le même projet que le déclencheur et recevoir des événements sous forme de requêtes HTTP POST envoyées à son chemin d'URL racine (/), à chaque déclenchement de l'événement.
  • DESTINATION_RUN_REGION : (facultatif) région dans laquelle se trouve le service Cloud Run de destination. Si elle n'est pas spécifiée, il est supposé que le service se trouve dans la même région que le déclencheur.
  • EVENT_FILTER_TYPE : l'identifiant de l'événement Cloud Storage et peut être l'un des éléments suivants :
    • google.cloud.storage.object.v1.finalized : cet événement est envoyé lorsqu'un nouvel objet est créé dans le bucket (ou qu'un objet existant est remplacé et qu'une nouvelle génération de cet objet est créée).
    • google.cloud.storage.object.v1.archived : Cet événement est envoyé lorsqu'une version en ligne d'un objet est archivée ou supprimée. Cet événement est uniquement envoyé pour les buckets avec gestion des versions.
    • google.cloud.storage.object.v1.deleted : Cet événement est envoyé lorsqu'un objet est définitivement supprimé. En fonction du paramètre de gestion des versions d'objet des buckets, cela signifie :
      • pour les buckets avec gestion des versions, que celui-ci n'est envoyé que lorsqu'une version est définitivement supprimée (mais pas lorsqu'un objet est archivé) ;
      • pour les buckets sans gestion des versions, que celui-ci est envoyé lorsqu'un objet est supprimé ou écrasé.
    • google.cloud.storage.object.v1.metadataUpdated : Cet événement est envoyé lorsque les métadonnées d'un objet existant changent.
  • BUCKET est l'identifiant unique du bucket Cloud Storage.
  • SERVICE_ACCOUNT_NAME : nom de votre compte de service géré par l'utilisateur.
  • PROJECT_ID : ID de votre projet Google Cloud.

Remarques :

  • Pour les événements directs de Cloud Storage, l'encodage de la charge utile d'événement est application/json.
  • Ces options sont obligatoires :
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • Chaque déclencheur peut comporter plusieurs filtres d'événement, séparés par une virgule et spécifiés dans une option --event-filters=[ATTRIBUTE=VALUE,…], ou vous pouvez répéter l'option pour ajouter d'autres filtres. Seuls les événements correspondant à tous les filtres sont envoyés à la destination. Les caractères génériques et les expressions régulières ne sont pas acceptés.
  • Une fois le déclencheur créé, le type de filtre d'événements ne peut plus être modifié. Pour un type d'événement différent, vous devez créer un déclencheur.
  • Les événements sont envoyés via des notifications Pub/Sub issues de Cloud Storage. Configurer trop de notifications enregistrées sur le même bucket peut entraîner le dépassement de la limite de notifications du bucket, comme indiqué par l'erreur Cloud Storage bucket ...: Pub/Sub notification limit reached. Le bucket peut comporter jusqu'à 10 configurations de notification déclenchant un événement spécifique. Consultez la page Quotas et limites pour Cloud Storage afin d'en savoir plus sur les quotas et les limites.
  • L'option --service-account permet de spécifier l'adresse e-mail du compte de service IAM (Identity and Access Management) associée au déclencheur.
  • Vous pouvez éventuellement spécifier un chemin d'accès relatif dans le service Cloud Run de destination auquel les événements du déclencheur doivent être envoyés, à l'aide de l'option --destination-run-path.

Exemple :

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

Cette commande crée un déclencheur appelé helloworld-trigger pour le bucket Cloud Storage my-bucket et l'événement identifié en tant que google.cloud.storage.object.v1.finalized.

Terraform

Vous pouvez créer un déclencheur pour une destination Cloud Run à l'aide de Terraform. Pour en savoir plus, consultez la page Créer un déclencheur à l'aide de Terraform.

Répertorier un déclencheur

Vous pouvez confirmer la création d'un déclencheur en répertoriant les déclencheurs Eventarc à l'aide de Google Cloud CLI ou de la console Google Cloud.

Console

  1. Dans la console Google Cloud, accédez à la page Déclencheurs d'Eventarc.

    Accéder à la page "Déclencheurs"

    Cette page répertorie vos déclencheurs dans tous les emplacements et inclut des détails tels que les noms, les régions, les fournisseurs d'événements, les destinations, etc.

  2. Pour filtrer vos déclencheurs, procédez comme suit :

    1. Cliquez sur Filtrer ou sur le champ Filtrer les déclencheurs.
    2. Dans la liste Propriétés, sélectionnez une option permettant de filtrer les déclencheurs.

    Vous pouvez sélectionner une seule propriété ou utiliser l'opérateur logique OR pour ajouter d'autres propriétés.

  3. Pour trier vos déclencheurs, à côté d'un en-tête de colonne compatible, cliquez sur Trier.

gcloud

Exécutez la commande suivante pour répertorier vos déclencheurs :

gcloud eventarc triggers list --location=-

Cette commande répertorie vos déclencheurs dans tous les emplacements et inclut des détails tels que les noms, les types, les destinations et les états.

Étapes suivantes