Ce tutoriel explique comment déployer une application conteneurisée à l'aide d'un service Cloud Run authentifié qui reçoit des événements à l'aide de Pub/Sub. Pub/Sub est un service de messagerie en temps réel entièrement géré qui vous permet d'envoyer et de recevoir des messages entre différentes applications.
Objectifs
Au cours de ce tutoriel, vous allez :
Déployer un service récepteur d'événements sur Cloud Run qui nécessite des appels authentifiés.
Créer un déclencheur Eventarc qui connecte un sujet Pub/Sub au service Cloud Run.
Envoyer un message au sujet Pub/Sub pour générer un événement.
Afficher l'événement dans les journaux Cloud Run.
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
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Mettez à jour les composants de Google Cloud CLI :
gcloud components update
- Connectez-vous à votre compte :
gcloud auth login
- Activer les API :
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ run.googleapis.com
- Définissez les variables de configuration utilisées dans ce tutoriel :
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION} export SERVICE_NAME=trigger-pubsub
-
Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (
roles/owner
). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.
Notez que par défaut, les autorisations Cloud Build incluent des autorisations permettant d'importer et de télécharger des artefacts Artifact Registry.
Autorisations requises
Pour obtenir les autorisations nécessaires pour suivre ce 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
) -
Administrateur Eventarc (
roles/eventarc.admin
) -
Accesseur de vues de journaux (
roles/logging.viewAccessor
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Diffuseur Pub/Sub (
roles/pubsub.publisher
) -
Administrateur de compte de service (
roles/iam.serviceAccountAdmin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
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.
-
Éditeur Cloud Build (
Notez le compte de service Compute Engine par défaut, car vous allez l'associer à un déclencheur Eventarc pour représenter l'identité du déclencheur à des fins de test. Ce compte de service est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud qui utilise Compute Engine, avec le format d'adresse e-mail suivant :
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez
PROJECT_NUMBER
par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises conformément au principe du moindre privilège.
- Par défaut, les services Cloud Run ne peuvent être appelés que par les propriétaires de projet, les éditeurs de projet, ainsi que par les administrateurs et les demandeurs Cloud Run.
Vous pouvez contrôler l'accès service par service. Toutefois, à des fins de test, attribuez le rôle Demandeur Cloud Run (
run.invoker
) au compte de service Compute Engine sur le projet Google Cloud. Cela permet d'accorder le rôle sur tous les services et jobs Cloud Run d'un projet.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invoker
Notez que si vous créez un déclencheur pour un service Cloud Run authentifié sans attribuer le rôle Demandeur Cloud Run, le déclencheur est bien créé et actif. Cependant, le déclencheur ne fonctionnera pas comme prévu et un message semblable au suivant s'affichera dans les journaux :
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator
) au compte de service pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
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.
Déployer un récepteur d'événements sur Cloud Run
Déployez un service Cloud Run qui consigne le contenu d'un événement.
Clonez le dépôt GitHub.
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.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-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/eventarc/pubsub/
Python
cd python-docs-samples/eventarc/pubsub/
Go
cd golang-samples/eventarc/pubsub/
Java
cd java-docs-samples/eventarc/pubsub/
Ruby
cd ruby-docs-samples/eventarc/pubsub/
C#
cd dotnet-docs-samples/eventarc/pubsub/
Créez le conteneur et importez-le dans Cloud Build :
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
Déployez l'image de conteneur dans Cloud Run :
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
Lorsque l'invite Allow unauthenticated invocations to trigger-pubsub (y/N)? (Autoriser les appels non authentifiés à déclencher-pubsub (y/N) ?) apparaît, répondez
n
pour "Non".
Lorsque l'URL du service Cloud Run s'affiche, le déploiement est terminé.
Créer un déclencheur Eventarc
Lorsqu'un message est publié dans le sujet Pub/Sub, l'événement déclenche le service Cloud Run.
Créez un déclencheur pour écouter les messages Pub/Sub :
Nouveau sujet Pub/Sub
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Cela crée un sujet Pub/Sub et un déclencheur associé nommé
trigger-pubsub
.Sujet Pub/Sub existant
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google CloudTOPIC_ID
: ID du sujet Pub/Sub existant
Cela crée un déclencheur nommé
trigger-pubsub
pour le sujet Pub/Sub existant.Notez que lorsque vous créez un déclencheur Eventarc pour la première fois dans un projet Google Cloud, le provisionnement de l'agent de service Eventarc peut prendre quelques instants. Ce problème peut généralement être résolu en essayant à nouveau de créer le déclencheur. Pour en savoir plus, consultez Erreurs d'autorisation refusée.
Vérifiez que le déclencheur a bien été créé. Notez que, bien que votre déclencheur soit créé immédiatement, il peut falloir jusqu'à deux minutes pour qu'il soit pleinement opérationnel.
gcloud eventarc triggers list --location=${REGION}
L'état du déclencheur renvoyé doit être
ACTIVE: Yes
.
Générer et afficher un événement
Publiez un message dans un sujet Pub/Sub pour générer un événement et déclencher le service Cloud Run. Le service Cloud Run consigne les messages dans les journaux de service.
Recherchez et définissez le sujet Pub/Sub en tant que variable d'environnement :
export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \ --format='value(transport.pubsub.topic)')
Envoyez un message au sujet Pub/Sub pour générer un événement :
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
L'événement est envoyé au service Cloud Run, qui consigne le message d'événement.
Pour afficher les entrées de journal liées aux événements créées par votre service, procédez comme suit :
gcloud logging read 'textPayload: "Hello there!"'
L'entrée de journal doit être semblable à ceci :
textPayload: 'Hello, Hello there!'
L'affichage des journaux peut nécessiter quelques instants. S'ils n'apparaissent pas immédiatement, patientez une minute et vérifiez de nouveau.
Effectuer un nettoyage
Pour éviter que des frais ne vous soient facturés, tels que le stockage de l'image de conteneur dans Artifact Registry, le stockage de fichiers dans votre bucket Cloud Storage et le déclenchement de Eventarc, vous pouvez supprimer les ressources que vous avez créées pour ce tutoriel :
Vous pouvez également supprimer votre projet Google Cloud. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID