Configurer Eventarc pour déclencher des workflows qui s'intègrent à GKE Autopilot et Pub/Sub

Configurer Eventarc pour déclencher des workflows qui s'intègrent à GKE Autopilot et Pub/Sub

À propos de cet atelier de programmation

subjectDernière mise à jour : févr. 2, 2023
account_circleRédigé par Andrey Shakirov, Christopher Grant

1. Présentation

Dans cet atelier, vous allez créer un déclencheur Eventarc qui connecte un sujet Pub/Sub au service Workflows. Eventarc vous permet de dissocier la communication entre les services, afin de rendre votre solution plus extensible et basée sur les événements. Vous allez créer un flux de travail qui comprend plusieurs étapes afin d’exécuter un processus commercial afin de calculer les points de récompense des clients pour une commande chez Cymbal Eats. Le workflow enverra plusieurs requêtes à une application exécutée sur GKE Autopilot et publiera un message dans le sujet Pub/Sub pour informer l'application Order Service des points de récompense calculés.

6c0606022b76f79d.png

Qu'est-ce que GKE Autopilot ?

GKE Autopilot est un mode de fonctionnement dans GKE dans lequel Google gère la configuration de votre cluster, y compris les nœuds, le scaling, la sécurité et d'autres paramètres préconfigurés. Les clusters Autopilot sont optimisés pour exécuter la plupart des charges de travail de production et provisionner des ressources de calcul en fonction de vos fichiers manifestes Kubernetes. La configuration simplifiée respecte les bonnes pratiques et recommandations de GKE concernant la configuration, l'évolutivité et la sécurité des clusters et des charges de travail. Pour obtenir la liste des paramètres intégrés, consultez le tableau Comparaison entre Autopilot et Standard.

Avec GKE Standard, les utilisateurs sont chargés de gérer les nœuds de calcul et la configuration du pool de nœuds, tandis que GKE s'occupe du reste.

Responsabilités du client et de Google lors de l'exécution en mode GKE Standard

85500aad65f87437.png

Avec GKE Autopilot, Google est responsable de la configuration et de la gestion du pool de nœuds. Vous pouvez ainsi vous concentrer sur les applications et les services qui s'exécutent au-dessus du cluster.

Qu'est-ce qu'Eventarc ?

Eventarc vous permet de créer des architectures basées sur des événements sans avoir à implémenter, personnaliser ni gérer l'infrastructure sous-jacente. Eventarc offre une solution standardisée pour gérer le flux de changements d'état, appelés événements, entre des microservices découplés. Lorsqu'il est déclenché, Eventarc les achemine via des abonnements Pub/Sub vers différentes destinations (par exemple, Workflows, Cloud Run) tout en gérant pour vous la distribution, la sécurité, les autorisations, l'observabilité et la gestion des exceptions.

Fournisseurs d'événements Google

  • Plus de 90 fournisseurs Google Cloud. Ces fournisseurs envoient des événements directement à partir de la source (par exemple, Cloud Storage) ou via des entrées Cloud Audit Logs.
  • fournisseurs Pub/Sub. Ces fournisseurs envoient des événements à Eventarc à l'aide de messages Pub/Sub.

Fournisseurs tiers

Les fournisseurs tiers sont des entités autres que Google qui proposent une source Eventarc.

Déclencheurs Eventarc

  • Événements Cloud Pub/Sub Eventarc peut être déclenché par des messages publiés dans des sujets Pub/Sub.
  • Événements Cloud Audit Logs (CAL). Cloud Audit Logs fournit des journaux d'audit pour les activités d'administration et l'accès aux données pour chaque projet, dossier et organisation Cloud.
  • Événements directs : Eventarc peut être déclenché par divers événements directs, tels que la mise à jour d'un bucket Cloud Storage ou d'un modèle Firebase Remote Config.

Destinations de l'événement

  • Workflows
  • Cloud Run
  • GKE
  • Cloud Functions( 2nd gen)

c7ca054200edf1b3.png

Qu'est-ce que Workflows ?

Workflows est un service entièrement géré qui vous permet d'intégrer des microservices, des tâches et des API. Workflows est un service sans serveur qui s'adaptera à votre demande.

Cas d'utilisation de Workflows:

  • Les workflows basés sur des événements s'exécutent sur des déclencheurs définis. Par exemple, lorsqu'une nouvelle commande est envoyée et que vous souhaitez calculer les points de fidélité des clients. Ou lorsqu'une commande est annulée, l'événement peut être publié et tous les services intéressés le traiteront.
  • Les workflows de jobs par lot exécutent des jobs régulièrement à l'aide de Cloud Scheduler. Par exemple, une tâche de nuit pour rechercher les éléments de menu dont l'état a échoué et les supprimer.

Workflows est idéal pour les workflows qui orchestrent des services. Vous pouvez automatiser des processus comprenant l'attente et les nouvelles tentatives pendant une durée maximale d'un an.

Avantages de Workflows:

  • La configuration plutôt que le code:réduisez les contraintes techniques en déplaçant la logique vers la configuration plutôt que d'écrire du code.
  • Simplifiez votre architecture. Les workflows avec état vous permettent de visualiser et de surveiller des intégrations de services complexes sans dépendances supplémentaires.
  • Intégrez la fiabilité et la tolérance aux pannes. Contrôlez les échecs avec une logique de nouvelle tentative et une gestion des erreurs par défaut ou personnalisées, même en cas de défaillance d'autres systèmes, en plaçant chaque étape du processus dans Cloud Spanner pour vous aider à suivre la progression.
  • Aucune maintenance. Évolutivité selon les besoins: vous n'avez rien à corriger ni à gérer. Vous ne payez que lorsque vos workflows s'exécutent, sans frais en cas d'attente ou d'inactivité.

Dans cet atelier, vous allez configurer un workflow basé sur des événements.

Objectifs de l'atelier

Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :

  • Configurer le sujet Pub/Sub et Eventarc pour déclencher Workflows
  • Configurer Workflow pour effectuer des appels d'API vers une application exécutée sur GKE Autopilot
  • Configurer Workflow pour publier des messages dans Pub/Sub
  • Interroger les journaux structurés Workflows dans Cloud Logging et à l'aide de gcloud CLI

Prérequis

  • Pour cet atelier, nous partons du principe que vous connaissez la console Cloud et les environnements Cloud Shell.
  • Une expérience préalable de GKE et de Cloud Pub/Sub est utile, mais pas obligatoire.

2. Préparation

Configuration du projet Cloud

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet.
  • Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.

Configuration de l'environnement

Activez Cloud Shell en cliquant sur l'icône située à droite de la barre de recherche.

8613854df02635a3.png

Clonez le dépôt, accédez au répertoire, copiez et collez la commande ci-dessous dans le terminal, puis appuyez sur Entrée:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Déployer les dépendances requises en exécutant la commande gke-lab-setup.sh

Les ressources suivantes seront créées:

  • Cluster et instance AlloyDB
  • Cluster GKE Autopilot
./gke-lab-setup.sh

Si vous êtes invité à donner votre autorisation, cliquez sur "Autoriser". pour continuer.

6356559df3eccdda.png

La configuration prendra environ 10 minutes.

Attendez que le script soit terminé et que le résultat ci-dessous s'affiche avant d'effectuer d'autres étapes.

NAME: client-instance
ZONE: us-central1-c
MACHINE_TYPE: e2-medium
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.9
EXTERNAL_IP: 35.232.109.233
STATUS: RUNNING

3. Cluster GKE Autopilot

Examiner le cluster GKE Autopilot

Définissez les variables d'environnement du projet:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

Lors de la configuration initiale, le cluster a été créé à l'aide de la commande ci-dessous (vous n'avez pas besoin d'exécuter cette commande):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Exécutez la commande suivante pour afficher le cluster GKE Autopilot créé:

gcloud container clusters list

Exemple de résultat :

772db9dd58172e0c.png

Exécutez la commande suivante pour stocker les identifiants du cluster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Déployer une application

Vous allez maintenant déployer une application de service client. Il s'agit d'un microservice Java qui utilise le framework Quarkus.

Accédez au dossier cymbal-eats/customer-service, puis exécutez les commandes ci-dessous pour créer et importer une image de conteneur:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Définissez l'adresse IP privée AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Exécutez les commandes ci-dessous pour créer un objet de secrets Kubernetes afin de stocker les identifiants de la base de données que l'application de service client utilisera pour se connecter à la base de données:

DB_NAME=customers
DB_USER
=postgres
DB_PASSWORD
=password123

kubectl create secret generic gke
-alloydb-secrets \
 
--from-literal=database=$DB_NAME \
 
--from-literal=username=$DB_USER \
 
--from-literal=password=$DB_PASSWORD \
 
--from-literal=db_host=$DB_HOST

Exécutez la commande suivante pour remplacer CUSTOMER_SERVICE_IMAGE dans le fichier deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Exécutez la commande suivante pour déployer l'application:

kubectl apply -f customer-service-deployment.yaml

Le passage de l'application à l'état RUNNING (En cours d'exécution) prend quelques instants.

Examinez le fichier de spécification de déploiement:

deployment.yaml.tmpl

Voici la partie de la configuration qui spécifie les ressources requises pour exécuter cette application.

    spec:
      containers:
      - name: customer-service
        image: CUSTOMER_SERVICE_IMAGE
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
            ephemeral-storage: 512Mi
          limits:
            cpu: 500m
            memory: 1024Mi
            ephemeral-storage: 1Gi

Exécutez la commande suivante pour créer une adresse IP externe qui sera utilisée dans le workflow:

SERVICE_NAME=customer-service

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

Exécutez la commande suivante pour vérifier les ressources créées:

kubectl get all

Exemple de résultat :

179a23bd33793924.png

4. Examiner le workflow

Concepts fondamentaux de Workflows

Un workflow comprend une série d'étapes décrites à l'aide de la syntaxe Workflows( YAML ou JSON).

Une fois qu'un workflow est créé, il est déployé, ce qui le prépare à être exécuté.

Une exécution est une exécution unique de la logique contenue dans la définition d'un workflow. Un workflow qui n'a pas été exécuté ne génère aucuns frais. Toutes les exécutions de workflow sont indépendantes, et la mise à l'échelle rapide du produit permet un grand nombre d'exécutions simultanées.

Contrôles d'exécution

  • Étapes : pour créer un workflow, vous devez définir l'élément steps et l'ordre d'exécution souhaités à l'aide de la syntaxe Workflows. Chaque workflow doit comporter au moins une étape.
  • Conditions : vous pouvez utiliser un bloc switch comme mécanisme de sélection pour permettre à la valeur d'une expression de contrôler le flux d'exécution d'un workflow.
  • Itérations : vous pouvez utiliser une boucle for pour itérer une séquence de chiffres ou un ensemble de données, comme une liste ou une carte.
  • Sous-workflows : un sous-workflow fonctionne de la même manière qu'une routine ou une fonction dans un langage de programmation. Il vous permet d'encapsuler une étape ou un ensemble d'étapes que votre workflow répète plusieurs fois.

Déclencher des exécutions

  • Manuelle : vous pouvez gérer les workflows à partir de la console Google Cloud ou de la ligne de commande à l'aide de la Google Cloud CLI.
  • Programmatique : les bibliothèques clientes Cloud pour l'API Workflows, ou l'API REST, peuvent être utilisées pour gérer les workflows.
  • Planifié : vous pouvez utiliser Cloud Scheduler pour exécuter un workflow selon un calendrier spécifique.

Arguments d'exécution

Vous pouvez accéder aux données transmises au moment de l'exécution en ajoutant un champ params à votre workflow principal (placé dans un bloc principal). Le bloc "main" accepte un seul argument de n'importe quel type de données JSON valide. Le champ "params" nomme la variable utilisée par le workflow pour stocker les données que vous transmettez.

Logique du workflow

S'il n'existe pas, le workflow effectuera un appel d'API pour créer un client, puis mettre à jour les points de fidélité. En fonction du montant total de la commande, le workflow sélectionne un multiplicateur pour calculer les points de récompense du client. Pour en savoir plus, consultez l'exemple ci-dessous.

    - calculate_multiplier:
        switch:
          - condition: ${totalAmount < 10}
            steps:
              - set_multiplier1:
                  assign:
                    - multiplier: 2
          - condition: ${totalAmount >= 10 and totalAmount < 25}
            steps:
              - set_multiplier2:
                  assign:
                    - multiplier: 3
          - condition: ${totalAmount >= 25}
            steps:
              - set_multiplier3:
                  assign:
                    - multiplier: 5
    - calculate_rewards:
        assign:
            - rewardPoints: ${customerRecord.rewardPoints + multiplier}

99f9cf1076c03fb6.png

5. Configurer et déployer le workflow

Exécutez la commande suivante pour afficher l'adresse IP externe du service:

kubectl get svc

Exemple de résultat :

fe5cfec2bc836a5f.png

Définissez la variable d'environnement ci-dessous en utilisant la valeur "External IP" (Adresse IP externe) indiquée dans le résultat précédent.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Remplacez l'URL d'application de service client dans le modèle de workflow:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml

Définissez l'emplacement des variables d'environnement du service et du projet Workflows:

gcloud config set workflows/location ${REGION}

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

Créez un compte de service personnalisé pour le workflow avec les autorisations suivantes:

  • API de journalisation des appels
  • Publier des messages dans le sujet Pub/Sub
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa

gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/logging.logWriter"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.publisher"

Workflow de déploiement Le workflow est configuré pour utiliser le compte de service créé à l'étape précédente:

export WORKFLOW_NAME=rewardsWorkflow

gcloud workflows deploy ${WORKFLOW_NAME} \
  --source=gkeRewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

Examinez la source du workflow et d'autres détails(onglet "Déclencheurs"). Pour le moment, aucun déclencheur n'est configuré pour exécuter ce workflow. Vous le configurerez à l'étape suivante.

66ba7ebbde76d5a6.png

6. Configurer les sujets Pub/Sub et le déclencheur Eventarc

Vous allez ensuite créer deux sujets Pub/Sub et configurer un déclencheur Eventarc.

L'application du service des commandes publiera des messages dans order-topic avec des informations sur les nouvelles commandes.

Le workflow publiera des messages dans order-points-topic avec des informations sur les points de fidélité de la commande et le montant total. Le service de commande(non déployé dans le cadre de cet atelier) expose un point de terminaison utilisé par l'abonnement push pour order-points-topic, afin de mettre à jour les points de fidélité et le montant total par commande.

Créez des sujets Pub/Sub:

export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID

Définissez l'emplacement du service Eventarc:

gcloud config set eventarc/location ${REGION}

Créez un compte de service personnalisé qui permettra au déclencheur Eventarc d'exécuter des workflows.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Accordez au compte de service l'accès pour exécuter des workflows.

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/workflows.invoker"

Créer un déclencheur Eventarc pour écouter les messages Pub/Sub et les distribuer à Workflows

gcloud eventarc triggers create new-orders-trigger \
  --destination-workflow=${WORKFLOW_NAME} \
  --destination-workflow-location=${REGION} \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --transport-topic=$TOPIC_ID

Exemple de résultat :

Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done.     
Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow].
WARNING: It may take up to 2 minutes for the new trigger to become active.

Examinez le déclencheur Eventarc créé.

bda445561ad5f4.png

Vérifiez l'abonnement créé pour le déclencheur.

3fccdda7d5526597.png

Examinez les modifications côté workflow. Un déclencheur a été ajouté.

23d338abc16eaac8.png

7. Tester le workflow

6c0606022b76f79d.png

Pour simuler le service Order Service, vous allez envoyer des messages au sujet Pub/Sub depuis Cloud Shell et vérifier les journaux du service client dans la console Cloud.

export TOPIC_ID=order-topic

gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Exemple de résultat :

messageIds:
- '5063709859203105'

Examinez les détails de l'exécution du workflow et les journaux.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Journalisation structurée du workflow

Le workflow est configuré pour écrire des journaux structurés au format JSON. Les journaux sont écrits à l'aide de l'API Cloud Logging, de la ressource workflows.googleapis.com/Workflow et sous le nom de journal projects/${PROJECT_ID}/logs/Workflows.

Vérifiez la configuration de la journalisation ci-dessous.

    - log_totalAmount:
        call: sys.log
        args:
            json:
              orderNumber: ${order.orderNumber}
              totalAmount: ${totalAmount}
              multiplier: ${multiplier}
              totalRewardPoints: ${rewardPoints}
              orderRewardPoints: ${orderRewardPoints}
            severity: INFO

Ouvrez l'explorateur de journaux dans la console Cloud et exécutez une requête pour rechercher les commandes traitées dont le montant total est supérieur à 2 $.

Pour afficher le champ de requête de recherche, cliquez sur "Afficher la requête".

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"

Exemple de résultat :

9093f87159f1b928.png

Ouvrez Cloud Shell et utilisez la gcloud CLI pour lire les journaux à l'aide des commandes ci-dessous.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

Exemple de résultat au format table:

35d5fd851ecde60.png

Exécutez la commande ci-dessous pour renvoyer les journaux au format JSON:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq

Exemple de résultat au format json:

ac7421548ea9a9f2.png

9. Consulter les dossiers client

(Étapes facultatives)

Exécutez les commandes ci-dessous pour définir la variable d'environnement de l'URL du service client.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl $CUSTOMER_SERVICE_URL/customer | jq

Exemple de résultat :

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-31T17:22:08.853644",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 4,
    "state": "CA",
    "updateDateTime": "2023-01-31T17:22:09.652117",
    "zip": "94043"
  }
]

Exécutez la commande pour publier une nouvelle commande plusieurs fois et vérifier les points de récompense des clients avec la commande curl.

Publier le nouveau message de commande:

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

Vérifiez les points de récompense des clients:

curl $CUSTOMER_SERVICE_URL/customer | jq

Exécutez la commande ci-dessous pour rechercher les derniers journaux:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

10. Félicitations !

Félicitations, vous avez terminé cet atelier de programmation.

Points abordés

  • Configurer le sujet Pub/Sub et Eventarc pour déclencher des workflows
  • Configurer Workflow pour effectuer des appels d'API vers une application s'exécutant sur GKE Autopilot
  • Configurer un workflow pour publier des messages dans Pub/Sub
  • Interroger les journaux structurés Workflows dans Cloud Logging et à l'aide de gcloud CLI

Étapes suivantes :

Découvrez d'autres ateliers de programmation Cymbal Eats:

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

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.