Créer des déclencheurs à partir d'événements Pub/Sub

Vous pouvez appeler des services et des fonctions Cloud Run en configurant un déclencheur Pub/Sub.

Lorsque vous configurez le déclencheur, vous l'associez à un sujet Pub/Sub spécifique. Cela garantit que votre service ou votre fonction est appelé automatiquement chaque fois qu'un message est publié dans ce sujet.

Vous pouvez configurer ce déclencheur de deux manières :

  • Déclencheur Pub/Sub direct (recommandé) : acheminez les messages directement vers votre service ou votre fonction à l'aide de Pub/Sub. Vous gérez l'abonnement directement, et votre service ou fonction reçoit la requête push Pub/Sub standard. Utilisez cette option si vous avez besoin d'une configuration plus simple et d'une latence plus faible.
  • Déclencheur basé sur Eventarc : acheminez les messages Pub/Sub vers votre service ou votre fonction à l'aide d'Eventarc. Vous gérez les déclencheurs Pub/Sub de la même manière que les autres sources Eventarc, et votre service ou fonction reçoit les événements en tant que CloudEvents. Utilisez cette option si vous avez besoin des fonctionnalités avancées de filtrage ou de routage d'Eventarc.

Avant de commencer

  1. Assurez-vous d'avoir configuré un nouveau projet pour Cloud Run, comme décrit sur la page de configuration.

  2. Activez les API Artifact Registry, Cloud Build, Cloud Run Admin, Cloud Logging et Pub/Sub :

    Activer les API

    Si vous configurez un déclencheur basé sur Eventarc, vous devez également activer l'API Eventarc :

    Activer l'API Eventarc

Rôles requis

Attribuez les rôles et autorisations IAM requis. Si vous configurez un déclencheur basé sur Eventarc, consultez les rôles et autorisations IAM requis pour Eventarc.

Rôles requis pour le compte de déploiement

Pour obtenir les autorisations nécessaires pour déclencher des événements Pub/Sub, 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 page Gérer l'accès aux projets, aux dossiers et aux organisations.

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

Notez que par défaut, les autorisations Cloud Build incluent des autorisations permettant d'importer et de télécharger des artefacts Artifact Registry.

Créer un déclencheur Pub/Sub

Console

  1. Dans la console Google Cloud , accédez à la page Services de Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur le service ou la fonction pour lequel vous souhaitez créer un déclencheur Pub/Sub.

  3. Sélectionnez l'onglet Triggers (Déclencheurs).

    Sélectionnez l'onglet correspondant à la configuration de déclencheur que vous avez choisie :

    1. Cliquez sur Ajouter un déclencheur, puis sélectionnez Déclencheur Pub/Sub > Direct.
    2. Dans le panneau Abonnement Pub/Sub direct :
      • Dans le champ Sujet Cloud Pub/Sub, sélectionnez le sujet si vous en avez déjà créé un, ou cliquez sur Créer un sujet pour en créer un.
      • Dans le champ Compte de service, sélectionnez le compte de service que l'abonnement utilise pour appeler votre service. Si la console indique des rôles manquants, cliquez sur Tout accorder.
      • Dans le champ Chemin de l'URL du service, saisissez le chemin d'accès de votre service qui doit recevoir les messages, par exemple / (par défaut) ou /pubsub. La console ajoute ce chemin d'accès à l'URL de votre service.
    3. Cliquez sur Enregistrer.

    Eventarc

    Dans le volet Déclencheur Eventarc, modifiez les détails du déclencheur comme suit :

    1. Saisissez un nom pour le déclencheur dans le champ Nom du déclencheur ou utilisez le nom par défaut.

    2. Sélectionnez un type de déclencheur dans la liste :

      • Sources Google pour spécifier des déclencheurs pour Pub/Sub, Cloud Storage, Firestore et d'autres fournisseurs d'événements Google.

      • Tiers pour intégrer des fournisseurs autres que Google qui proposent une source Eventarc. Pour plus d'informations, consultez la section Événements tiers dans Eventarc.

    3. Sélectionnez Pub/Sub dans la liste Fournisseur d'événements pour sélectionner un produit qui fournit le type d'événement permettant de déclencher votre fonction. Pour obtenir la liste des fournisseurs d'événements, consultez Fournisseurs et destinations d'événements.

    4. Sélectionnez google.cloud.pubsub.topic.v1.messagePublished dans la liste Type d'événement. La configuration du déclencheur varie en fonction du type d'événement accepté. Pour en savoir plus, consultez la section Types d'événements.

    5. Dans la liste Sélectionner un sujet Cloud Pub/Sub, choisissez un sujet que le déclencheur doit surveiller. Les messages que vous publiez dans ce sujet déclenchent des appels vers votre fonction.

    6. Si le champ Région est activé, sélectionnez un emplacement pour le déclencheur Eventarc. En général, l'emplacement d'un déclencheur Eventarc doit correspondre à celui de la ressourceGoogle Cloud dont vous souhaitez surveiller les événements. Dans la plupart des scénarios, vous devez également déployer votre fonction dans la même région. Consultez Comprendre les emplacements Eventarc pour en savoir plus sur les emplacements des déclencheurs Eventarc.

    7. Dans le champ Compte de service, sélectionnez un compte de service. Les déclencheurs Eventarc sont associés à des comptes de service, destinés à être utilisés comme identité lors de l'appel de votre fonction. Le compte de service de votre déclencheur Eventarc doit être autorisé à appeler votre fonction. Par défaut, Cloud Run utilise le compte de service Compute Engine par défaut.

    8. Vous pouvez éventuellement spécifier le chemin d'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. Par exemple : /, /route, route et route/subroute.

    9. Si vous le souhaitez, pour activer les nouvelles tentatives en cas d'échec de la tentative de distribution, cochez la case Activer les nouvelles tentatives en cas d'échec. Sinon, le comportement par défaut est une seule tentative de distribution sans nouvelle tentative. Pour en savoir plus, consultez Réessayer les événements.

    10. Une fois les champs obligatoires renseignés, cliquez sur Enregistrer le déclencheur.

gcloud

Pour créer un déclencheur pour votre service ou votre fonction à l'aide de la gcloud CLI :

  1. Déployez votre service ou votre fonction si ce n'est pas déjà fait.

  2. Si vous disposez déjà d'un sujet Pub/Sub, ignorez cette étape. Sinon, créez un sujet Pub/Sub :

    gcloud pubsub topics create TOPIC_NAME
  3. Sélectionnez l'onglet correspondant à la configuration de déclencheur que vous avez choisie :

    Direct

    1. Configurez les rôles requis pour l'agent de service Pub/Sub :

      Rôles requis pour l'agent de service Pub/Sub

      Les étapes suivantes décrivent comment créer et utiliser un compte de service qui peut être utilisé par l'abonnement Pub/Sub pour appeler votre service ou votre fonction. Ces étapes sont requises lorsque vous utilisez la Google Cloud CLI pour créer une commande de déclencheur Pub/Sub. Si vous utilisez la console Google Cloud pour créer le déclencheur, vous pouvez ignorer ces étapes.

      1. Créez ou sélectionnez un compte de service pour représenter l'identité de l'abonnement Pub/Sub.

             gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
                --display-name "Cloud Run Pub/Sub Invoker"

        Remplacez SERVICE_ACCOUNT_NAME par un nom unique pour votre compte de service.

      2. Autorisez le compte de service demandeur à appeler votre service :

          gcloud run services add-iam-policy-binding SERVICE_NAME \
             --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \
             --role=roles/run.invoker

        La propagation des modifications IAM peut prendre plusieurs minutes. En attendant, des erreurs HTTP 403 peuvent s'afficher dans les journaux du service.

      3. Autorisez Pub/Sub à créer des jetons d'authentification dans votre projet :

          gcloud projects add-iam-policy-binding PROJECT_ID \
             --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \
             --role=roles/iam.serviceAccountTokenCreator

        Remplacez les éléments suivants :

        • PROJECT_ID : ID de votre projet Google Cloud .
        • PROJECT_NUMBER : numéro de votre projet Google Cloud .

        L'ID et le numéro du projet sont répertoriés dans le panneau Informations sur le projet de la consoleGoogle Cloud pour votre projet.

    2. Créez un abonnement Pub/Sub avec le compte de service :

      gcloud pubsub subscriptions create SUBSCRIPTION_NAME \
        --topic TOPIC_NAME \
        --ack-deadline=600 \
        --push-endpoint=SERVICE_URL/ \
        --push-auth-service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

      Remplacez les éléments suivants :

      • SUBSCRIPTION_NAME : nom de l'abonnement que vous souhaitez créer.
      • TOPIC_NAME : nom du sujet que vous avez créé précédemment.
      • SERVICE_URL : URL HTTPS fournie lors du déploiement du service. Cette URL fonctionne même si vous avez également ajouté un mappage de domaine.
      • SERVICE_ACCOUNT_NAME : nom du compte de service que vous avez créé précédemment.
      • PROJECT_ID : ID de votre projet Google Cloud .

      Remarques :

      • L'option --push-auth-service-account active la fonctionnalité push de Pub/Sub pour l'authentification et l'autorisation.

      • Le domaine de votre service Cloud Run est automatiquement enregistré pour être utilisé avec les abonnements Pub/Sub.

      • Pour Cloud Run uniquement, une vérification d'authentification intégrée permet de s'assurer que le jeton est valide, et une vérification d'autorisation permet de s'assurer que le compte de service est autorisé à appeler le service Cloud Run.

    Eventarc

    Exécutez la commande suivante pour créer un déclencheur qui filtre et achemine les événements :

    gcloud eventarc triggers create TRIGGER_NAME  \
       --location=LOCATION \
       --destination-run-service=DESTINATION_RUN_SERVICE  \
       --destination-run-region=DESTINATION_RUN_REGION \
       --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
       --transport-topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

    Remplacez les éléments suivants :

    • TRIGGER_NAME : 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).

      Pour éviter tout problème de performances et de résidence des données, l'emplacement doit correspondre à celui du service Google Cloud qui génère les événements. Pour en savoir plus, consultez la page Emplacements Eventarc.

    • DESTINATION_RUN_SERVICE : nom du service ou de la fonction Cloud Run déployé qui reçoit les événements du déclencheur.
    • DESTINATION_RUN_REGION : (facultatif) Cloud Run location dans lequel se trouve la fonction Cloud Run de destination. Si elle n'est pas spécifiée, il est supposé que la fonction se trouve dans la même région que le déclencheur.
    • L'option --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" est obligatoire et ne peut pas être modifiée. Pour un type d'événement différent, vous devez créer un déclencheur.
    • TOPIC_NAME correspond à l'ID du sujet Pub/Sub existant. Le sujet doit se trouver dans le même projet que le déclencheur.
    • SERVICE_ACCOUNT_NAME : nom de votre compte de service géré par l'utilisateur.
    • PROJECT_ID : ID de votre projet Google Cloud .

    Remarques :

    • Vous pouvez éventuellement spécifier une seule tentative de distribution d'événement sans nouvelle tentative à l'aide de l'option --max-retry-attempts. La seule valeur valide est 1. Si vous omettez l'option, le comportement de nouvelle tentative standard s'applique. Pour en savoir plus, consultez Réessayer les événements.
    • D'autres options sont disponibles. Pour en savoir plus, consultez les sections sur gcloud eventarc triggers create

Terraform

Pour créer un déclencheur Eventarc pour une fonction Cloud Run, consultez Créer un déclencheur à l'aide de Terraform.

Étapes suivantes