Ce tutoriel explique comment écrire, déployer et appeler un service Cloud Run à partir d'un abonnement push Pub/Sub.
Objectifs
- Écrire, créer et déployer un service sur Cloud Run
- Appeler le service en publiant un message dans un sujet Pub/Sub
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Pub/Sub and Cloud Run APIs.
- Installez et initialisez gcloud CLI.
- Mettez à jour les composants :
gcloud components update
Rôles requis
Pour obtenir les autorisations nécessaires pour suivre le tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Éditeur Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrateur Cloud Run (
roles/run.admin
) -
Créateur de comptes de service (
roles/iam.serviceAccountCreator
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Éditeur Pub/Sub (
roles/pubsub.editor
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrateur de l'espace de stockage (
roles/storage.admin
)
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 via des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer les paramètres par défaut de gcloud
Pour configurer gcloud avec les valeurs par défaut pour votre service Cloud Run, procédez comme suit :
Définissez le projet par défaut :
gcloud config set project PROJECT_ID
Remplacez PROJECT_ID par le nom du projet que vous avez créé pour ce tutoriel.
Configurez gcloud pour la région choisie :
gcloud config set run/region REGION
Remplacez REGION par la région Cloud Run compatible de votre choix.
Emplacements Cloud Run
Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.
Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité.
Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres produits Google Cloud utilisés par votre service Cloud Run.
L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.
Cloud Run est disponible dans les régions suivantes :
Soumis aux tarifs de niveau 1
asia-east1
(Taïwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)europe-north1
(Finlande) Faibles émissions de CO2europe-southwest1
(Madrid) Faibles émissions de CO2europe-west1
(Belgique) Faibles émissions de CO2europe-west4
(Pays-Bas) Faibles émissions de CO2europe-west8
(Milan)europe-west9
(Paris) Faibles émissions de CO2me-west1
(Tel Aviv)us-central1
(Iowa) Faibles émissions de CO2us-east1
(Caroline du Sud)us-east4
(Virginie du Nord)us-east5
(Columbus)us-south1
(Dallas) Faibles émissions de CO2us-west1
(Oregon) Faibles émissions de CO2
Soumis aux tarifs de niveau 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Séoul, Corée du Sud)asia-southeast1
(Singapour)asia-southeast2
(Jakarta)asia-south1
(Mumbai, Inde)asia-south2
(Delhi, Inde)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsovie, Pologne)europe-west10
(Berlin) Faibles émissions de CO2.europe-west12
(Turin)europe-west2
(Londres, Royaume-Uni) Faibles émissions de CO2europe-west3
(Francfort, Allemagne) Faibles émissions de CO2europe-west6
(Zurich, Suisse) Faibles émissions de CO2me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montréal) Faibles émissions de CO2northamerica-northeast2
(Toronto) Faibles émissions de CO2southamerica-east1
(São Paulo, Brésil) Faibles émissions de CO2southamerica-west1
(Santiago, Chili) Faibles émissions de CO2us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de la console Google Cloud.
Créer un dépôt standard Artifact Registry
Créez un dépôt standard Artifact Registry pour stocker votre image de conteneur :
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
Remplacez :
- REPOSITORY par un nom unique pour le dépôt
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
Créer un sujet Pub/Sub
L'exemple de service est déclenché par les messages publiés dans un sujet Pub/Sub. Vous devez donc créer un sujet dans Pub/Sub.
gcloud
Pour créer un sujet Pub/Sub, utilisez la commande suivante :
gcloud pubsub topics create myRunTopic
Vous pouvez conserver le nom myRunTopic ou le remplacer 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.
Pour créer un sujet Pub/Sub, ajoutez le code suivant à votre fichier main.tf
existant :
Vous pouvez utiliser un nom de sujet unique dans votre projet Cloud.
Récupérer l'exemple de code
Pour récupérer l’exemple de code à utiliser, procédez comme suit :
Clonez le dépôt de l'exemple d'application sur votre machine locale :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code Cloud Run :
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
C#
cd dotnet-docs-samples/run/Run.Samples.Pubsub.MinimalApi/
Examiner le code
Le code de ce tutoriel comprend les éléments suivants :
Un serveur qui gère les requêtes entrantes.
Node.js
Pour que le service Node.js reste facile à tester, la configuration du serveur est distincte du démarrage du serveur.
Le serveur Web Node.js est configuré dans
app.js
.Le serveur Web est démarré dans
index.js
:Python
Go
Java
C#
Un gestionnaire qui traite le message Pub/Sub et enregistre un message d'accueil.
Node.js
Python
Go
Java
C#
Vous devez coder le service pour renvoyer un code de réponse HTTP précis. Les codes de réussite, tels que HTTP
200
ou204
, confirment le traitement complet du message Pub/Sub. Les codes d'erreur, tels que HTTP400
ou500
, indiquent qu'une nouvelle tentative d'envoi sera effectuée, comme décrit dans le guide Recevoir des messages en mode push.Un fichier
Dockerfile
qui définit l'environnement d'exploitation du service. Le contenu du fichierDockerfile
varie selon le langage.Node.js
Python
Go
Java
Cet exemple utilise Jib pour créer des images Docker à l'aide d'outils Java courants. Jib optimise les builds de conteneurs sans requérir de fichier Dockerfile ni d'installation Docker. Découvrez comment créer des conteneurs Java avec Jib.
C#
Pour en savoir plus sur l'authentification de l'origine des requêtes Pub/Sub, consultez la page Effectuer l'intégration à Pub/Sub.
Envoyer le code
La transmission du code se déroule en trois étapes : création d'une image de conteneur avec Cloud Build, importation de l'image de conteneur dans Artifact Registry, puis déploiement de cette image dans Cloud Run.
Pour transmettre votre code, procédez comme suit :
-
Créez votre conteneur et publiez-le dans Artifact Registry :
Node.js
Remplacez :gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. L'image est stockée dans Artifact Registry et peut être réutilisée si nécessaire.
Python
Remplacez :gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. L'image est stockée dans Artifact Registry et peut être réutilisée si nécessaire.
Go
Remplacez :gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. L'image est stockée dans Artifact Registry et peut être réutilisée si nécessaire.
Java
- Utilisez l'assistant d'identification gcloud CLI pour autoriser Docker à transférer du contenu vers Artifact Registry.
gcloud auth configure-docker
-
Utilisez le plug-in Maven Jib pour créer et transférer le conteneur dans Artifact Registry.
Remplacez :mvn compile jib:build -D image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image.En cas de réussite, un message BUILD SUCCESS apparaît. L'image est stockée dans Artifact Registry et peut être réutilisée si nécessaire.
C#
Remplacez :gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image.En cas de réussite, un message SUCCESS apparaît contenant l'ID, l'heure de création et le nom de l'image. L'image est stockée dans Artifact Registry et peut être réutilisée si nécessaire.
-
Déployez votre application :
Ligne de commande
-
Exécutez la commande suivante pour déployer votre application :
Remplacez :gcloud run deploy pubsub-tutorial --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub --no-allow-unauthenticated
- PROJECT_ID par l'ID de votre projet Google Cloud
- REPOSITORY par le nom du dépôt Artifact Registry ;
- REGION par la région Google Cloud à utiliser pour le dépôt Artifact Registry.
pubsub
correspond au nom de l'image etpubsub-tutorial
au nom du service. Notez que l'image de conteneur est déployée sur le service et la région que vous avez précédemment configurés dans la section Configurer gcloud.L'option
--no-allow-unauthenticated
limite l'accès non authentifié au service. En gardant le service privé, le processus d'intégration automatique à Pub/Sub de Cloud Run assure l'authentification des requêtes. Cette configuration est présentée en détail dans la section Effectuer l'intégration à Pub/Sub. Pour en savoir plus sur l'authentification basée sur Identity and Access Management (IAM), consultez la page Gérer les accès à l'aide d'IAM.Patientez jusqu'à la fin du déploiement, soit environ 30 secondes. En cas de réussite, la ligne de commande affiche l'URL du service. Cette URL est utilisée pour configurer un abonnement Pub/Sub.
-
Si vous souhaitez déployer une mise à jour de code sur le service, répétez les opérations précédentes. Chaque déploiement sur un service crée une nouvelle révision et commence automatiquement à acheminer le trafic une fois prêt.
Terraform
Pour créer un service Cloud Run, ajoutez le code suivant à votre fichier
.tf
existant.Remplacez la valeur d'
image
par l'URL de votre image :REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
. -
Effectuer l'intégration à Pub/Sub
Pour intégrer le service à Pub/Sub, procédez comme suit :
gcloud
Créez ou sélectionnez un compte de service pour représenter l'identité de l'abonnement Pub/Sub.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Vous pouvez utiliser l'identité
cloud-run-pubsub-invoker
ou la remplacer par un nom unique dans votre projet Google Cloud Platform.Créez un abonnement Pub/Sub avec le compte de service :
Autorisez le compte de service demandeur à appeler votre service
pubsub-tutorial
:gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
La diffusion des modifications IAM peut prendre plusieurs minutes. Pendant ce temps, des erreurs
HTTP 403
peuvent s'afficher dans les journaux de 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.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Remplacez :
- 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 la console Google Cloud pour votre projet.
Créez un abonnement Pub/Sub avec le compte de service :
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
Remplacez :
- myRunTopic par le sujet que vous avez créé précédemment
- SERVICE-URL par l'URL HTTPS fournie lors du déploiement du service. Cette URL fonctionne même si vous avez également ajouté un mappage de domaine.
- 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.Votre domaine de service Cloud Run est automatiquement enregistré pour une utilisation avec les abonnements Pub/Sub.
Cloud Run dispose de vérifications intégrées permettant de confirmer que le jeton d'authentification est valide et que le compte de service est autorisé à appeler le service Cloud Run.
Votre service est maintenant entièrement intégré à Pub/Sub.
Terraform
Créez ou sélectionnez un compte de service pour représenter l'identité de l'abonnement Pub/Sub.
Créez un abonnement Pub/Sub avec le compte de service :
Autorisez le compte de service demandeur à appeler votre service
pubsub-tutorial
:Autorisez Pub/Sub à créer des jetons d'authentification dans votre projet :
Créez un abonnement Pub/Sub avec le compte de service :
Votre service est maintenant entièrement intégré à Pub/Sub.
Essayer
Pour tester la solution de bout en bout, procédez comme suit :
Envoyez un message au sujet sur Pub/Sub :
gcloud pubsub topics publish myRunTopic --message "Runner"
Au lieu d'utiliser la ligne de commande comme décrit dans ce tutoriel, vous pouvez programmer la publication des messages. Reportez-vous à la page Publier des messages pour en savoir plus.
Accédez aux journaux du service :
- Accédez à Google Cloud Console.
- Cliquez sur le service
pubsub-tutorial
. Sélectionnez l'onglet Journaux.
L'affichage des journaux peut nécessiter quelques instants. S'ils n'apparaissent pas immédiatement, patientez et vérifiez de nouveau.
Recherchez le message "Hello Runner!".
Nettoyer
Pour mieux comprendre comment utiliser Cloud Run avec Pub/Sub, ignorez le nettoyage pour le moment et poursuivez avec le tutoriel sur le traitement d'images avec Cloud Run.
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE-NAME
Où SERVICE-NAME est le nom de service que vous avez choisi.
Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.
Supprimez la configuration régionale gcloud par défaut que vous avez ajoutée lors de la configuration du tutoriel :
gcloud config unset run/region
Supprimez la configuration du projet :
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
- Supprimez le sujet Pub/Sub
myRunTopic
. - Supprimez l'abonnement Pub/Sub
myRunSubscription
. - Supprimez de Artifact Registry votre image de conteneur, nommée
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
. - Supprimez le compte de service demandeur
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
.
- Supprimez le sujet Pub/Sub
É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.
- Développez l'exemple de service déployé dans ce tutoriel pour ajouter une fonctionnalité de traitement d'images qui modifie les images importées dans Cloud Storage.
- Découvrez comment les sujets s'intègrent à l'architecture Pub/Sub et comment gérer les sujets.
- Pour en savoir plus sur les abonnements Pub/Sub, consultez la section Gérer les abonnements.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.