Recevoir des événements à l'aide de messages Pub/Sub (gcloud CLI)
Ce guide de démarrage rapide explique comment configurer un service Google Kubernetes Engine (GKE) en tant que destination pour recevoir des événements d'un sujet Pub/Sub à l'aide d'Eventarc.
Dans ce guide, vous allez :
- Créer un cluster GKE
- Configurer un compte de service pour extraire des événements de Pub/Sub à l'aide d'un composant de redirecteur d'événement qui transfère les événements à la cible.
- Initialiser les destinations GKE dans Eventarc.
- Déployer un service GKE qui reçoit des événements
- Créer un déclencheur Eventarc qui connecte un sujet Pub/Sub au service GKE.
- Générer et afficher un événement Pub/Sub.
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
- Installez et initialisez Google Cloud CLI.
Si vous êtes invité à configurer une région de calcul par défaut, saisissez
n
. - Mettez à jour les composants gcloud :
gcloud components update
- Activez les API Google Cloud, Cloud Build, Resource Manager, Google Kubernetes Engine, Container Registry et Eventarc :
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
- Définissez les variables de configuration utilisées dans ce guide de démarrage rapide :
gcloud config set project PROJECT_ID gcloud config set run/cluster events-cluster gcloud config set run/cluster_location us-central1 gcloud config set run/platform gke gcloud config set eventarc/location us-central1
RemplacezPROJECT_ID
par l'ID de votre projet Google Cloud. - Facultatif : Vous pouvez vérifier les paramètres de configuration à l'aide de la commande gcloud_name en saisissant :
gcloud config list
Le résultat doit se présenter comme suit :[eventarc] location = us-central1 [run] cluster = events-cluster cluster_location = us-central1 platform = gke
Créer un cluster GKE
Créez un cluster GKE avec le module complémentaire HttpLoadBalancing
.
Activez Workload Identity pour accéder aux services Google Cloud à partir d'applications s'exécutant dans GKE.
PROJECT_ID=$(gcloud config get-value project) gcloud beta container clusters create events-cluster \ --addons=HttpLoadBalancing \ --machine-type=n1-standard-4 \ --enable-autoscaling --min-nodes=2 --max-nodes=10 \ --no-issue-client-certificate --num-nodes=2 \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM \ --scopes=cloud-platform,logging-write,monitoring-write,pubsub \ --zone us-central1 \ --release-channel=rapid \ --workload-pool=$PROJECT_ID.svc.id.goog
Patientez pendant la création du cluster. Vous pouvez ignorer les avertissements pendant le processus de création. Une fois le cluster créé, le résultat doit ressembler à ce qui suit:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project
/zones/us-central1/clusters/events-cluster].
où my-project
correspond à l’ID de votre projet Google Cloud.
Cela crée un cluster GKE nommé events-cluster
dans my-project
.
Configurer un compte de service Google
Configurez un compte de service fourni par l'utilisateur et attribuez-lui des rôles spécifiques afin que le composant de redirecteur d'événements puisse extraire des événements de Pub/Sub.
Créez un compte de service appelé
TRIGGER_GSA
qui sera utilisé pour créer des déclencheurs :TRIGGER_GSA=eventarc-gke-triggers gcloud iam service-accounts create $TRIGGER_GSA
Attribuez les rôles
pubsub.subscriber
etmonitoring.metricWriter
au compte de service :gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Activer les destinations GKE
Pour chaque déclencheur qui cible un service GKE, Eventarc crée un composant de redirecteur d'événement qui extrait les événements de Pub/Sub et les transfère vers la cible. Pour créer le composant et gérer les ressources dans le cluster GKE, accordez des autorisations à un compte de service Eventarc :
Activez les destinations GKE pour Eventarc :
gcloud eventarc gke-destinations init
Lorsque vous êtes invité à lier les rôles requis, saisissez
y
.Les rôles suivants sont liés au compte de service :
compute.viewer
container.developer
iam.serviceAccountAdmin
Créer une destination de service GKE
À l'aide d'une image prédéfinie, gcr.io/cloudrun/hello
, déployez un service GKE qui recevra et consignera les événements :
Créez un déploiement Kubernetes :
SERVICE_NAME=hello-gke kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
Exposez-le en tant que service Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type LoadBalancer --port 80 --target-port 8080
Créer un déclencheur Pub/Sub
Lorsqu'un message est publié dans le sujet Pub/Sub, le déclencheur Eventarc envoie des messages au service GKE hello-gke
.
Créez un déclencheur GKE pour écouter les messages Pub/Sub :
Nouveau sujet Pub/Sub
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Cela crée un sujet Pub/Sub et un déclencheur associé nommé
gke-trigger-pubsub
.Sujet Pub/Sub existant
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Remplacez l'élément suivant :
PROJECT_ID
correspond à votre ID de projet Google Cloud.TOPIC_ID
correspond à l'ID du sujet Pub/Sub existant. Cela crée un déclencheur nommégke-trigger-pubsub
pour le sujet Pub/Sub existant.
Vérifiez que le déclencheur a bien été créé :
gcloud eventarc triggers list
Le résultat doit se présenter comme suit :
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes
Générer et afficher un événement
Vous pouvez générer un événement pour déclencher le service GKE en publiant un message dans le sujet Pub/Sub. Vous pouvez ensuite afficher le message dans les journaux du pod.
Recherchez et définissez le sujet Pub/Sub en tant que variable d'environnement :
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --format='value(transport.pubsub.topic)')
Envoyez un message au sujet Pub/Sub pour générer un événement :
gcloud pubsub topics publish $TOPIC --message="Hello World"
Le service GKE consigne le message de l'événement.
Pour afficher le message de l'événement, procédez comme suit:
- Recherchez l'ID du pod:
kubectl get pods
Le résultat doit se présenter comme suit :NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
oùNAME
est le nom du pod. Copiez la valeur deNAME
afin de pouvoir l'utiliser à l'étape suivante. - Vérifiez les journaux du pod:
kubectl logs NAME
RemplacezNAME
par le nom du pod que vous avez copié. - Recherchez une entrée de journal semblable à ceci :
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
- Recherchez l'ID du pod:
Effectuer un nettoyage
Bien que Cloud Run ne facture pas un service inutilisé, il se peut que des frais vous soient toujours facturés pour le stockage de l'image de conteneur dans Container Registry, les ressources Eventarc, les messages Pub/Sub et pour le cluster GKE.
Vous pouvez supprimer votre image, supprimer le sujet Pub/Sub, supprimer l'abonnement Pub/Sub et supprimer le cluster GKE.
Pour supprimer le déclencheur Eventarc :
gcloud eventarc triggers delete gke-trigger-pubsub
Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
gcloud projects delete PROJECT_ID_OR_NUMBER
Remplacez PROJECT_ID_OR_NUMBER
par l'ID ou le numéro du projet.
Étape suivante
Recevoir des événements à l'aide des journaux d'audit Cloud (Google Cloud CLI)