Cette page décrit comment utiliser Pub/Sub pour envoyer des messages au point de terminaison de votre service Cloud Run, où ils sont ensuite diffusés aux conteneurs en tant que requêtes HTTP. Cette page explique comment permettre à votre service de traiter de manière sécurisée les messages envoyés depuis un abonnement Pub/Sub dans le même projet Google Cloud.
Grâce aux comptes de service et aux autorisations IAM, vous pouvez utiliser Pub/Sub avec Cloud Run de manière sécurisée et privée, sans avoir à exposer publiquement votre service Cloud Run. Seul l'abonnement Pub/Sub que vous avez configuré peut appeler votre service.
Délais de confirmation pour Cloud Run
Assurez-vous de définir le délai de confirmation d'abonnement Pub/Sub (ackDeadlineSeconds
) sur le maximum autorisé de 600 secondes.
Votre service Cloud Run doit confirmer le message Pub/Sub en renvoyant une réponse dans un délai de 600 secondes. Sinon, Pub/Sub redistribue le message, ce qui entraîne un déclenchement en double de votre service Cloud Run.
Cas d'utilisation
Exemples d'utilisation possible :
- Transformation de données après la réception d'un événement lors d'une importation de fichier vers un bucket Cloud Storage
- Traitement des journaux de la suite Google Cloud Operations avec Cloud Run en les exportant vers Pub/Sub
- Publication et traitement de vos propres événements personnalisés à partir de vos services Cloud Run
Présentation de l'intégration
Pour intégrer votre service dans Pub/Sub, procédez comme suit :
- Créer un sujet Pub/Sub
- Ajoutez du code dans votre service Cloud Run pour répondre aux messages Pub/Sub envoyés au sujet que vous avez créé.
- Créez un compte de service doté des autorisations requises.
- Créez un abonnement Pub/Sub et associez-le au compte de service. Cet abonnement enverra à votre service tout message publié sur le sujet.
Avant de commencer
- Si ce n'est pas déjà fait, configurez votre environnement comme décrit sur la page de configuration de Cloud Run.
- Ce guide part du principe que vous disposez déjà d'un service Cloud Run et que vous souhaitez ajouter du code qui l'intègre à Pub/Sub. Si vous ne disposez pas d'un tel service, envisagez d'utiliser le tutoriel Cloud Run pour Pub/Sub plutôt que de suivre la présente page.
Ajouter du code pour gérer les messages de Pub/Sub
Modifiez le code de service existant pour ajouter le code nécessaire à la compatibilité avec Pub/Sub. Votre service doit extraire le message de la requête et renvoyer un code de réussite attendu. Les extraits suivants pour les langages sélectionnés (vous pouvez utiliser n'importe quel langage) montrent comment procéder pour un message Hello World simple :
Node.js
Python
Go
Java
Vous devez coder le service pour renvoyer un code de réponse HTTP précis. Les codes de réussite, tels que HTTP 200
ou 204
, confirment le traitement complet du message Pub/Sub. Les codes d'erreur, tels que HTTP 400
ou 500
, indiquent qu'une nouvelle tentative d'envoi sera effectuée, comme décrit dans la section Recevoir des messages en mode push.
Créez puis déployez votre service Cloud Run après l'avoir mis à jour avec le code Pub/Sub ci-dessus.
Créer un compte de service pour l'abonnement
Vous devez créer un compte de service à associer à votre abonnement Pub/Sub et lui donner l'autorisation d'appeler votre service Cloud Run. Les messages Pub/Sub envoyés vers votre service Cloud Run portent l'identité de ce compte de service.
Vous pouvez utiliser un compte de service existant pour représenter l'identité de l'abonnement Pub/Sub, ou en créer un autre.
Pour créer un compte de service et lui donner l'autorisation d'appeler le service Cloud Run, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page Comptes de service.
Sélectionnez un projet.
Saisissez le nom du compte de service à afficher dans la console Google Cloud.
La console Google Cloud génère un ID de compte de service basé sur ce nom. Modifiez l'ID si nécessaire. Vous ne pourrez pas le modifier par la suite.
Facultatif : saisissez la description du compte de service.
Cliquez sur Créer et continuer.
Facultatif : cliquez sur le champ Sélectionner un rôle.
Sélectionnez Cloud Run > Demandeur Cloud Run.
Cliquez sur OK.
Ligne de commande
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Remplacez
- SERVICE_ACCOUNT_NAME par un nom écrit en minuscules unique dans votre projet Google Cloud, par exemple
my-invoker-service-account-name
; - DISPLAYED_SERVICE_ACCOUNT_NAME par le nom que vous souhaitez afficher pour ce compte de service, par exemple dans la console :
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME par un nom écrit en minuscules unique dans votre projet Google Cloud, par exemple
Pour Cloud Run, autorisez votre compte de service à appeler votre service :
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Remplacer
- SERVICE par le nom du service que vous souhaitez que Pub/Sub appelle ;
- SERVICE_ACCOUNT_NAME par le nom du compte de service ;
- PROJECT_ID par l'ID de votre projet Google Cloud
Accordez à votre compte de service l'accès au projet afin qu'il soit autorisé à effectuer des actions spécifiques sur les ressources de votre projet :
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Remplacer
RESOURCE_ID : ID de votre projet Google Cloud.
PRINCIPAL : l'identifiant du compte principal, qui se présente généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple :
user:my-user@example.com
. Pour obtenir la liste complète des valeurs possibles pour PRINCIPAL, consultez la documentation de référence sur les liaisons de stratégie.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour créer le compte de service, ajoutez les éléments suivants à votre fichier
.tf
existant :Pour autoriser votre compte de service à appeler votre service, ajoutez ce qui suit à votre fichier
.tf
existant :
Créer un sujet Pub/Sub
Étant donné que les requêtes adressées à votre service sont déclenchées par des messages publiés dans un sujet Pub/Sub, vous devez créer un sujet :
Console
Accédez à la page des sujets Pub/Sub dans Google Cloud Console.
Cliquez sur Créer un sujet.
Saisissez un nom unique pour votre sujet (par exemple : MyTopic).
Command line
gcloud pubsub topics create TOPIC-NAME
Remplacez TOPIC-NAME par un nom de sujet unique dans votre projet Google Cloud.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Cette section explique comment utiliser Terraform pour définir votre service dans une configuration Terraform à l'aide de la ressource google_pubsub_topic
du fournisseur Google Cloud Platform.
Ajoutez le contenu suivant à votre fichier .tf
:
Créer un abonnement push et l'associer au compte de service
Une fois que vous avez créé le sujet Pub/Sub, vous devez abonner votre service pour recevoir les messages envoyés à un sujet, et vous devez associer l'abonnement au compte de service que vous avez créé pour votre service. Vous pouvez utiliser Google Cloud Console ou la ligne de commande gcloud :
Console
Accédez à la page des sujets Pub/Sub.
Cliquez sur le sujet auquel vous souhaitez vous abonner.
Cliquez sur Create Subscription (Créer un abonnement) pour afficher le formulaire d'abonnement :
Dans le formulaire,
- Spécifiez le type de distribution push.
- Dans le champ "Endpoint URL" (URL du point de terminaison), spécifiez l'URL de votre service, qui s'affiche sur la page d'informations du service.
- Dans la liste déroulante Service Account (Compte de service), sélectionnez le compte de service créé avec les autorisations requises.
- Définissez l'expiration de l'abonnement et un délai de confirmation de 600 secondes.
- Cliquez sur Create (Créer).
L'abonnement est terminé. Les messages publiés sur le sujet seront désormais envoyés vers votre service.
Command line
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.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Remplacer
- PROJECT-ID par l'ID de votre projet Google Cloud
PROJECT-NUMBER par le 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 Google Cloud Console pour votre projet.
Créez un abonnement Pub/Sub avec le compte de service que vous avez créé avec les autorisations requises :
gcloud pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=SERVICE-ACCOUNT-NAME@PROJECT-ID.iam.gserviceaccount.com
Remplacer
- TOPIC-NAME par le sujet que vous avez créé précédemment
- SERVICE-URL par l'URL HTTPS fournie lors du déploiement du service. Pour l'obtenir, utilisez la commande
gcloud run services describe
en spécifiant le nom de votre service : recherchez la ligne de retour commençant pardomain
. - PROJECT-ID par l'ID de votre projet Google Cloud
L'option
--push-auth-service-account
active la fonctionnalité push de Pub/Sub pour l'authentification et l'autorisation.Notez que le délai de confirmation est défini sur 600 secondes au maximum.
L'abonnement est terminé. Les messages publiés sur le sujet seront désormais envoyés vers votre service. Vous pouvez envoyer un message de test au sujet à l'aide de la commande suivante :
gcloud pubsub topics publish TOPIC --message "hello"
Remplacez TOPIC par le nom du sujet que vous avez créé.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
-
Autorisez Pub/Sub à créer des jetons d'authentification dans votre projet. Ajoutez le code ci-dessous à votre fichier
.tf
: -
Créez un abonnement Pub/Sub avec le compte de service que vous avez créé avec les autorisations requises. Ajoutez le code ci-dessous à votre fichier
.tf
: -
L'abonnement est terminé. Les messages publiés sur le sujet seront désormais envoyés vers votre service. Vous pouvez envoyer un message de test au sujet à l'aide de la commande suivante :
gcloud pubsub topics publish TOPIC --message "hello"
Remplacez TOPIC par le nom du sujet que vous avez créé.
Étape suivante
- Pour en savoir plus sur l'augmentation de la sécurité de production à l'aide des contrôles d'entrée internes afin de limiter le trafic entrant, consultez la page Restreindre le trafic entrant.
- Consultez le tutoriel Cloud Run pour Pub/Sub afin d'obtenir un exemple d'application complet.
- Consultez le tutoriel Cloud Run pour Cloud Storage afin d'obtenir un exemple utilisant Pub/Sub pour générer un traitement d'image asynchrone.
- Consultez la documentation Pub/Sub pour en savoir plus sur ce service.