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
Assurez-vous d'avoir configuré un nouveau projet pour Cloud Run, comme décrit sur la page de configuration.
Activez les API Artifact Registry, Cloud Build, Cloud Run Admin, Cloud Logging et Pub/Sub :
Si vous configurez un déclencheur basé sur Eventarc, vous devez également 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 :
- Administrateur Cloud Run (
roles/run.admin) - Accesseur de vues de journaux (
roles/logging.viewAccessor) - Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) - Administrateur de compte de service (
roles/iam.serviceAccountAdmin) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) - Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin)
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
Dans la console Google Cloud , accédez à la page Services de Cloud Run :
Cliquez sur le service ou la fonction pour lequel vous souhaitez créer un déclencheur Pub/Sub.
Sélectionnez l'onglet Triggers (Déclencheurs).
Sélectionnez l'onglet correspondant à la configuration de déclencheur que vous avez choisie :
Direct (recommandé)
- Cliquez sur Ajouter un déclencheur, puis sélectionnez Déclencheur Pub/Sub > Direct.
- 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.
- Cliquez sur Enregistrer.
Eventarc
Dans le volet Déclencheur Eventarc, modifiez les détails du déclencheur comme suit :
Saisissez un nom pour le déclencheur dans le champ Nom du déclencheur ou utilisez le nom par défaut.
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.
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.
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.
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.
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.
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.
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,routeetroute/subroute.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.
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 :
Déployez votre service ou votre fonction si ce n'est pas déjà fait.
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
Sélectionnez l'onglet correspondant à la configuration de déclencheur que vous avez choisie :
Direct
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.
-
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_NAMEpar un nom unique pour votre compte de service. -
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 403peuvent s'afficher dans les journaux du service. -
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.
-
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-accountactive 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_NAMEcorrespond à 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 est1. 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
- Découvrez comment déclencher des services à partir de Pub/Sub.
- Découvrez comment configurer les nouvelles tentatives.
- Découvrez comment déclencher avec des événements.