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 de sujet Pub/Sub à l'aide d'Eventarc.

Dans ce guide, vous allez :

  1. effectuer des tâches préparatoires telles que l'activation des API et la configuration d'un compte de service ;
  2. créer un cluster GKE ;
  3. initialiser les destinations GKE dans Eventarc ;
  4. déployer un service GKE qui reçoit des événements ;
  5. créer un déclencheur Eventarc qui connecte un sujet Pub/Sub au service GKE ;
  6. générer et afficher un événement Pub/Sub.

Avant de commencer

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. 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.

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Mettez à jour les composants de Google Cloud CLI :
    gcloud components update
  11. Activez les API Eventarc, Resource Manager et Google Kubernetes Engine :
    gcloud services enable eventarc.googleapis.com \
       cloudresourcemanager.googleapis.com \
       container.googleapis.com
  12. Définissez les variables de configuration utilisées dans ce guide de démarrage rapide :
    PROJECT_ID=$(gcloud config get-value project)
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
    LOCATION=us-central1
  13. 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.

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce guide de démarrage rapide, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    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.

  14. 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.

  15. Attribuez le rôle d'abonné Pub/Sub (roles/pubsub.subscriber) sur le projet au compte de service Compute Engine par défaut afin que le déclencheur Eventarc puisse extraire des événements. à partir de Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  16. 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 cluster GKE

Un cluster GKE contient au moins une machine de plan de contrôle de cluster et plusieurs machines de calcul appelées nœuds. Les nœuds sont des instances de machines virtuelles (VM) Compute Engine qui exécutent les processus Kubernetes nécessaires pour faire partie du cluster. Vous déployez les applications sur des clusters, et ces applications s'exécutent sur les nœuds.

Créez un cluster Autopilot nommé events-cluster :

gcloud container clusters create-auto $CLUSTER_NAME \
    --region $LOCATION

La création du cluster peut prendre plusieurs minutes. Une fois le cluster créé, le résultat doit ressembler à ce qui suit :

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING

Cela crée un cluster GKE nommé events-cluster dans un projet avec un ID de projet Google Cloud MY_PROJECT.

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 à l'agent de service Eventarc :

  1. Activez les destinations GKE pour Eventarc :

    gcloud eventarc gke-destinations init
  2. 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

Déployez un service GKE qui recevra et consignera les événements à l'aide d'une image prédéfinie, us-docker.pkg.dev/cloudrun/container/hello :

  1. Kubernetes se sert d'un fichier YAML appelé kubeconfig pour stocker les informations d'authentification de cluster pour kubectl. Mettez à jour le fichier kubeconfig avec les identifiants et les informations sur les points de terminaison pour pointer kubectl vers le cluster GKE :

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region $LOCATION
    
  2. Créez un déploiement Kubernetes :

    kubectl create deployment $SERVICE_NAME \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. Exposez-le en tant que service Kubernetes :

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP \
        --port 80 \
        --target-port 8080
    

Créer un déclencheur Eventarc

Lorsqu'un message est publié dans le sujet Pub/Sub, le déclencheur Eventarc envoie des messages au service GKE hello-gke.

  1. Créez un déclencheur GKE pour écouter les messages Pub/Sub :

    Nouveau sujet Pub/Sub

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --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é gke-trigger-pubsub.

    Sujet Pub/Sub existant

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • TOPIC_ID : ID du sujet Pub/Sub existant. Cela crée un déclencheur appelé gke-trigger-pubsub pour le sujet Pub/Sub existant.
  2. Vérifiez que le déclencheur a bien été créé. L'activation du déclencheur peut prendre jusqu'à deux minutes.

     gcloud eventarc triggers list
    

    La sortie devrait ressembler à ce qui suit :

    NAME: gke-trigger-pubsub
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    LOCATION: us-central1
    

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 ce message dans les journaux du pod.

  1. Recherchez et définissez le sujet Pub/Sub en tant que variable d'environnement :

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \
        --location=us-central1 \
        --format='value(transport.pubsub.topic)')
  2. 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.

  3. Pour afficher le message de l'événement, procédez comme suit :

    1. Recherchez l'ID du pod :

      kubectl get pods

      La sortie devrait ressembler à ce qui suit :

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      Copiez le NAME du pod à utiliser à l'étape suivante.

    2. Vérifiez les journaux du pod :

      kubectl logs NAME

      Remplacez NAME par le nom du pod que vous avez copié.

    3. 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"[...]}
      

Effectuer un nettoyage

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées.

Vous pouvez effectuer les opérations suivantes :

  1. Supprimer le déclencheur Eventarc.

    Le sujet Pub/Sub associé est également supprimé.

  2. Supprimez le cluster GKE.

Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. 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

Si vous envisagez d'explorer plusieurs tutoriels et guides de démarrage rapide, réutiliser des projets peut vous aider à ne pas dépasser les limites de quotas des projets.

Étapes suivantes

Recevoir des événements à l'aide des journaux d'audit Cloud (Google Cloud CLI)