Configura Eventarc para activar Workflows que se integran en GKE Autopilot y Pub/Sub

Configura Eventarc para activar Workflows que se integran en GKE Autopilot y Pub/Sub

Acerca de este codelab

subjectÚltima actualización: feb 2, 2023
account_circleEscrito por Andrey Shakirov, Christopher Grant

1. Descripción general

En este lab, crearás un activador de Eventarc que conecte un tema de Pub/Sub al servicio de Workflows. Eventarc te permite separar la comunicación de servicio a servicio, lo que hace que tu solución sea más extensible y esté basada en eventos. Crearás un flujo de trabajo que incluya varios pasos para ejecutar un proceso comercial y calcular los puntos de recompensa de los clientes por hacer pedidos en Cymbal Eats. El flujo de trabajo enviará varias solicitudes a una aplicación que se ejecute en GKE Autopilot y publicará un mensaje en el tema de Pub/Sub para notificar a la aplicación del servicio de pedidos sobre los puntos de recompensa calculados.

6c0606022b76f79d.png

¿Qué es GKE Autopilot?

GKE Autopilot es un modo de operación en GKE en el que Google administra la configuración de tu clúster, incluidos los nodos, el escalamiento, la seguridad y otros parámetros preestablecidos. Los clústeres de Autopilot están optimizados para ejecutar la mayoría de las cargas de trabajo de producción y aprovisionar recursos de procesamiento en función de los manifiestos de Kubernetes. La configuración optimizada sigue las prácticas recomendadas de GKE para la configuración, escalabilidad y seguridad de los clústeres y las cargas de trabajo. Para obtener una lista de los parámetros de configuración integrados, consulta la tabla Comparación de Autopilot y Standard.

Con GKE Standard, los usuarios son responsables de administrar los nodos trabajadores y la configuración del grupo de nodos mientras GKE se encarga del resto.

Comparación entre las responsabilidades del cliente y las de Google cuando se ejecuta en modo GKE Standard

85500aad65f87437.png

Con GKE Autopilot, la configuración y la administración de los grupos de nodos es responsabilidad de Google. Esto te permite enfocarte en las aplicaciones y los servicios que se ejecutan sobre el clúster.

¿Qué es Eventarc?

Eventarc te permite compilar arquitecturas basadas en eventos sin tener que implementar, personalizar o mantener la infraestructura subyacente. Eventarc ofrece una solución estandarizada para administrar el flujo de cambios de estado, llamados eventos, entre microservicios separados. Cuando se activa, Eventarc enruta estos eventos a través de suscripciones de Pub/Sub a varios destinos (p. ej., Workflows o Cloud Run), a la vez que administras la entrega, la seguridad, la autorización, la observabilidad y el manejo de errores por ti.

Proveedores de eventos de Google

  • Más de 90 proveedores de Google Cloud. Estos proveedores envían eventos directamente desde la fuente (por ejemplo, Cloud Storage) o a través de entradas de Registros de auditoría de Cloud.
  • Proveedores de Pub/Sub. Estos proveedores envían eventos a Eventarc con mensajes de Pub/Sub.

Proveedores externos

Los proveedores externos son entidades que no pertenecen a Google y que ofrecen una fuente de Eventarc.

Activadores de Eventarc

  • Eventos de Cloud Pub/Sub. Eventarc se puede activar con mensajes publicados en temas de Pub/Sub.
  • Eventos de los registros de auditoría de Cloud (CAL). Los Registros de auditoría de Cloud proporcionan registros de auditoría de actividad de los administradores y de acceso a los datos para cada proyecto, carpeta y organización de Cloud.
  • Eventos directos. Eventarc se puede activar mediante varios eventos directos, como una actualización a un bucket de Cloud Storage o una actualización de una plantilla de Firebase Remote Config.

Destinos de eventos

  • Workflows
  • Cloud Run
  • GKE
  • Cloud Functions( 2a gen.)

c7ca054200edf1b3.png

¿Qué es Workflows?

Workflows es un servicio completamente administrado que te permite integrar microservicios, tareas y APIs. Workflows es un servicio sin servidores que escalará para satisfacer tu demanda.

Casos de uso de Workflows:

  • Los flujos de trabajo controlados por eventos se ejecutan en activadores definidos. Por ejemplo, cuando se envía un pedido nuevo y quieres calcular los puntos de lealtad del cliente. Cuando se cancela un pedido, se puede publicar el evento y todos los servicios interesados lo procesarán.
  • Los flujos de trabajo de los trabajos por lotes ejecutan trabajos de forma regular con Cloud Scheduler. Por ejemplo, un trabajo nocturno para comprobar si hay elementos del menú en estado de error y borrarlos.

Workflows es ideal para flujos de trabajo que organizan servicios. Puedes automatizar procesos que incluyen esperas y reintentos de hasta un año.

Beneficios de Workflows:

  • Configuración a través del código: Mueve la lógica a la configuración para reducir la deuda técnica, en lugar de escribir código.
  • Simplifica tu arquitectura. Los flujos de trabajo con estado te permiten visualizar y supervisar integraciones de servicios complejas sin dependencias adicionales.
  • Incorporar confiabilidad y tolerancia a errores Controla las fallas con una lógica de reintento predeterminada o personalizada y el manejo de errores, incluso cuando otros sistemas fallan: un control de cada paso hacia Cloud Spanner para ayudarte a hacer un seguimiento del progreso.
  • No requieren mantenimiento. Escala según sea necesario: no es necesario aplicar parches ni mantener. Paga solo cuando se ejecuten tus flujos de trabajo, sin costo mientras esperas o están inactivos.

En este lab, configurarás un flujo de trabajo controlado por eventos.

Qué aprenderás

En este lab, aprenderás a realizar las siguientes tareas:

  • Configura el tema de Pub/Sub y Eventarc para activar Workflows
  • Configura el flujo de trabajo para realizar llamadas a la API a la aplicación que se ejecuta en GKE Autopilot
  • Configura el flujo de trabajo para publicar mensajes en Pub/Sub
  • Cómo consultar registros estructurados de Workflows en Cloud Logging y con gcloud CLI

Requisitos previos

  • Para este lab, se da por sentado que el usuario tiene conocimientos previos sobre los entornos de la consola de Cloud y Cloud Shell.
  • Es útil tener experiencia en GKE y Cloud Pub/Sub, pero no es obligatoria.

2. Configuración y requisitos

Configuración del proyecto de Cloud

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. por lo general, no te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, hay un tercer valor, un número de proyecto que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se te facture más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Configuración del entorno

Para activar Cloud Shell, haz clic en el ícono que se encuentra a la derecha de la barra de búsqueda.

8613854df02635a3.png

Clona el repositorio, navega al directorio, copia y pega el siguiente comando en la terminal y presiona Intro:

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

Para implementar las dependencias necesarias, ejecuta gke-lab-setup.sh.

Se crearán los siguientes recursos:

  • Instancia y clúster de AlloyDB
  • Clúster de GKE Autopilot
./gke-lab-setup.sh

Si se te solicita que autorices, haz clic en “Autorizar”. para continuar.

6356559df3eccdda.png

El proceso de configuración tardará unos 10 minutos.

Espera hasta que la secuencia de comandos finalice y veas el siguiente resultado antes de ejecutar otros pasos.

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. Clúster de GKE Autopilot

Revisa el clúster de GKE Autopilot

Configura las variables de entorno del proyecto:

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)')

Como parte de la configuración inicial, el clúster se creó con el siguiente comando (no es necesario que ejecutes este comando):

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

Ejecuta el comando para ver el clúster de GKE Autopilot creado:

gcloud container clusters list

Resultado de muestra:

772db9dd58172e0c.png

Ejecuta el comando para almacenar las credenciales del clúster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Implementa una aplicación

A continuación, implementarás una aplicación de atención al cliente. Este es un microservicio basado en Java que usa el framework de Quarkus.

Navega a la carpeta cymbal-eats/customer-service y ejecuta los siguientes comandos para compilar y subir una imagen de contenedor:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Configura la dirección IP privada de 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

Ejecuta los siguientes comandos para crear un objeto Secret de Kubernetes y así almacenar las credenciales de la base de datos que la aplicación de atención al cliente usará para conectarse a la base de datos:

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

Ejecuta el comando para reemplazar CUSTOMER_SERVICE_IMAGE en el archivo deployment.yaml:

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

Ejecuta el comando para implementar la aplicación:

kubectl apply -f customer-service-deployment.yaml

La aplicación tardará unos minutos en pasar al estado RUNNING.

Revisa el archivo de especificación de implementación:

deployment.yaml.tmpl

Esta es la parte de la configuración que especifica los recursos necesarios para ejecutar esta aplicación.

    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

Ejecuta el comando para crear una IP externa que se usará en el flujo de trabajo:

SERVICE_NAME=customer-service

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

Ejecuta el comando para verificar los recursos creados:

kubectl get all

Resultado de muestra:

179a23bd33793924.png

4. Revisa el flujo de trabajo

Conceptos principales de los flujos de trabajo

Un flujo de trabajo consta de una serie de pasos descritos mediante la sintaxis de Workflows( YAML o JSON).

Después de crear un flujo de trabajo, este se implementa, lo que prepara el flujo de trabajo para su ejecución.

Una ejecución es una ejecución única de la lógica contenida en la definición de un flujo de trabajo. Un flujo de trabajo que no se ejecutó no genera cargos. Todas las ejecuciones de los flujos de trabajo son independientes, y el escalamiento rápido del producto permite una gran cantidad de ejecuciones simultáneas.

Controles de ejecución

  • Pasos: Para crear un flujo de trabajo, debes definir el steps y el orden de ejecución deseados con la sintaxis de Workflows. Cada flujo de trabajo debe tener al menos un paso.
  • Condiciones: Puedes usar un bloque switch como un mecanismo de selección que permite que el valor de una expresión controle el flujo de la ejecución de un flujo de trabajo.
  • Iteraciones: Puedes usar un bucle for para iterar en una secuencia de números o a través de una colección de datos, como una lista o un mapa.
  • Subflujos de trabajo: Un subflujo de trabajo funciona de manera similar a una rutina o función en un lenguaje de programación, lo que te permite encapsular un paso o un conjunto de pasos que tu flujo de trabajo repetirá varias veces.

Activa ejecuciones

  • Manual: Puedes administrar flujos de trabajo desde la consola de Google Cloud o desde la línea de comandos con Google Cloud CLI.
  • Programática: Las bibliotecas cliente de Cloud para la API de Workflows o la API de REST se pueden usar para administrar flujos de trabajo.
  • Programado: Puedes usar Cloud Scheduler para ejecutar un flujo de trabajo en un programa en particular.

Argumentos del entorno de ejecución

Para acceder a los datos que se pasan en el entorno de ejecución, agrega un campo params al flujo de trabajo principal (ubicado en un bloque principal). El bloque principal acepta un solo argumento que es cualquier tipo de dato JSON válido. El campo de parámetros nombra la variable que el flujo de trabajo usa para almacenar los datos que pasas.

Lógica del flujo de trabajo

Si un cliente no existe, el flujo de trabajo realizará primero una llamada a la API para crear un cliente y, luego, actualizará los puntos de recompensa. Según el importe total del pedido, el flujo de trabajo seleccionará un multiplicador para calcular los puntos de recompensa del cliente. Consulta el siguiente ejemplo para obtener más detalles.

    - 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. Configura e implementa el flujo de trabajo

Ejecuta el comando para ver la dirección IP externa del servicio:

kubectl get svc

Resultado de muestra:

fe5cfec2bc836a5f.png

Configura la siguiente variable de entorno con el valor de IP externa del resultado anterior.

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

Reemplaza la URL de la aplicación de atención al cliente en la plantilla del flujo de trabajo:

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

Configura la ubicación para el servicio de Workflows y las variables de entorno del proyecto:

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)')

Crea una cuenta de servicio personalizada para el flujo de trabajo con los siguientes permisos:

  • APIs de registro de llamadas
  • Publica mensajes en el tema de 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"

Implementa el flujo de trabajo. El flujo de trabajo está configurado para usar la cuenta de servicio creada en el paso anterior:

export WORKFLOW_NAME=rewardsWorkflow

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

Revisa la fuente del flujo de trabajo y otros detalles(pestaña Activadores). Por el momento, no hay activadores configurados para ejecutar este flujo de trabajo. Lo configurarás en el siguiente paso.

66ba7ebbde76d5a6.png

6. Configura los temas de Pub/Sub y el activador de Eventarc

A continuación, crearás dos temas de Pub/Sub y configurarás un activador de Eventarc.

La aplicación de Servicio de pedidos publicará mensajes en order-topic con información sobre nuevos pedidos.

El flujo de trabajo publicará mensajes en order-points-topic con información sobre los puntos de recompensa del pedido y el importe total. El servicio de pedidos(parte que no se implementó de este lab) expone un extremo que usa la suscripción push para order-points-topic, para actualizar los puntos de recompensa y el importe total por pedido.

Crea temas de Pub/Sub nuevos:

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

Establece la ubicación para el servicio de Eventarc:

gcloud config set eventarc/location ${REGION}

Crea una cuenta de servicio personalizada que usará el activador de Eventarc para ejecutar los flujos de trabajo.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Otorgar acceso a la cuenta de servicio para ejecutar flujos de trabajo.

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

Crear un activador de Eventarc para escuchar los mensajes de Pub/Sub y entregarlos a 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

Resultado de muestra:

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.

Revisa el activador de Eventarc creado.

bda445561ad5f4.png

Revisa la suscripción creada para el activador.

3fccdda7d5526597.png

Revisa los cambios en el lado del flujo de trabajo. Se agregó un activador nuevo.

23d338abc16eaac8.png

7. Flujo de trabajo de prueba

6c0606022b76f79d.png

Para simular el servicio de pedidos, enviarás mensajes al tema de Pub/Sub desde Cloud Shell y verificarás los registros de atención al cliente en la consola de 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}]}'

Resultado de muestra:

messageIds:
- '5063709859203105'

Revisa los detalles y los registros de la ejecución del flujo de trabajo.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Registro estructurado del flujo de trabajo

El flujo de trabajo está configurado para escribir registros estructurados en formato JSON. Los registros se escriben con la API de Cloud Logging, el recurso workflows.googleapis.com/Workflow y con el nombre de registro projects/${PROJECT_ID}/logs/Workflows.

Revisa la configuración de registro que aparece a continuación.

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

Abre el Explorador de registros en la consola de Cloud y ejecuta una consulta para encontrar los pedidos procesados con un importe total superior a $2.

Para mostrar el campo de búsqueda, haz clic en "Mostrar consulta".

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"

Resultado de muestra:

9093f87159f1b928.png

Abre Cloud Shell y usa gcloud CLI para leer registros con los siguientes comandos.

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)"

Resultado de muestra con formato table:

35d5fd851ecde60.png

Ejecuta el siguiente comando para mostrar los registros en formato 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

Resultado de muestra con formato json:

ac7421548ea9a9f2.png

9. Revisar registros de clientes

(Pasos opcionales)

Ejecuta los siguientes comandos para configurar la variable de entorno de la URL de atención al cliente.

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

curl $CUSTOMER_SERVICE_URL/customer | jq

Resultado de muestra:

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

Ejecuta el comando para publicar un nuevo pedido varias veces y verifica los puntos de recompensa del cliente con el comando curl.

Publicar nuevo mensaje de pedido:

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}]}'

Verifica los puntos de recompensa para clientes:

curl $CUSTOMER_SERVICE_URL/customer | jq

Ejecuta el siguiente comando para verificar los últimos registros:

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. ¡Felicitaciones!

¡Felicitaciones! Completaste el codelab.

Temas abordados:

  • Cómo configurar el tema de Pub/Sub y Eventarc para activar Workflows
  • Cómo configurar el flujo de trabajo para realizar llamadas a la API a la aplicación que se ejecuta en GKE Autopilot
  • Cómo configurar el flujo de trabajo para publicar mensajes en Pub/Sub
  • Cómo consultar registros estructurados de Workflows en Cloud Logging y con gcloud CLI

¿Qué sigue?

Explora otros codelabs de Cymbal Eats:

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.