Configurazione di Eventarc per attivare flussi di lavoro che si integrano con GKE Autopilot e Pub/Sub

1. Panoramica

In questo lab creerai un trigger Eventarc che collega un argomento Pub/Sub al servizio Workflows. Eventarc ti consente di disaccoppiare la comunicazione da servizio a servizio, rendendo la tua soluzione più estensibile e basata su eventi. Creerai un workflow che include più passaggi per eseguire un processo aziendale per calcolare i punti premio dei clienti per gli ordini effettuati su Cymbal Eats. Il workflow invierà più richieste a un'applicazione in esecuzione su GKE Autopilot e pubblicherà un messaggio nell'argomento Pub/Sub per notificare all'applicazione Order Service i punti premio calcolati.

6c0606022b76f79d.png

Che cos'è GKE Autopilot?

GKE Autopilot è una modalità operativa in GKE in cui Google gestisce la configurazione del cluster, inclusi nodi, scalabilità, sicurezza e altre impostazioni preconfigurate. I cluster Autopilot sono ottimizzati per eseguire la maggior parte dei carichi di lavoro di produzione e per il provisioning delle risorse di calcolo in base ai manifest Kubernetes. La configurazione semplificata segue le best practice e i suggerimenti di GKE per la configurazione, la scalabilità e la sicurezza dei cluster e dei workload. Per un elenco delle impostazioni integrate, consulta la tabella Confronto tra Autopilot e Standard.

Con GKE Standard, gli utenti sono responsabili della gestione dei nodi worker e della configurazione del node pool, mentre il resto è gestito da GKE.

Responsabilità del cliente e di Google durante l'esecuzione in modalità GKE Standard

85500aad65f87437.png

Con GKE Autopilot, la configurazione e la gestione del pool di nodi sono responsabilità di Google. In questo modo puoi concentrarti sulle applicazioni e sui servizi eseguiti sopra il cluster.

Che cos'è Eventarc?

Eventarc ti consente di creare architetture basate su eventi senza dover implementare, personalizzare o gestire l'infrastruttura sottostante. Eventarc offre una soluzione standardizzata per gestire il flusso delle modifiche dello stato, chiamate eventi, tra microservizi disaccoppiati. Quando viene attivato, Eventarc indirizza questi eventi tramite le sottoscrizioni Pub/Sub a varie destinazioni (ad es. Workflows, Cloud Run) e gestisce per te la distribuzione, la sicurezza, l'autorizzazione, l'osservabilità e la gestione degli errori.

Fornitori di eventi Google

  • Più di 90 fornitori di Google Cloud. Questi provider inviano eventi direttamente dall'origine (ad esempio Cloud Storage) o tramite le voci di Cloud Audit Logs.
  • Fornitori Pub/Sub. Questi provider inviano eventi a Eventarc utilizzando i messaggi Pub/Sub.

Fornitori di terze parti

I provider di terze parti sono entità non Google che offrono un'origine Eventarc.

Trigger Eventarc

  • Eventi Cloud Pub/Sub. Eventarc può essere attivato da messaggi pubblicati negli argomenti Pub/Sub.
  • Eventi di Audit log di Cloud (CAL). Cloud Audit Logs fornisce audit log delle attività di amministrazione e dell'accesso ai dati per ogni progetto, cartella e organizzazione Cloud.
  • Eventi diretti. Eventarc può essere attivato da vari eventi diretti, ad esempio un aggiornamento di un bucket Cloud Storage o un aggiornamento di un modello Firebase Remote Config.

Destinazioni evento

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

c7ca054200edf1b3.png

Che cos'è Workflows?

Workflows è un servizio completamente gestito che consente di integrare microservizi, attività e API. Workflows è un servizio serverless e verrà scalato per soddisfare la domanda.

Casi d'uso di Workflows:

  • I workflow basati su eventi vengono eseguiti in base a trigger definiti. Ad esempio, quando viene inviato un nuovo ordine e vuoi calcolare i punti fedeltà del cliente. Oppure, quando un ordine viene annullato, l'evento può essere pubblicato e tutti i servizi interessati lo elaboreranno.
  • I workflow dei job batch eseguono i job regolarmente utilizzando Cloud Scheduler. Ad esempio, un job notturno per verificare la presenza di voci di menu con stato non riuscito ed eliminarle.

Workflows è ideale per i workflow che orchestrano i servizi. Puoi automatizzare i processi che includono tempi di attesa e nuovi tentativi fino a un anno.

Vantaggi dei flussi di lavoro:

  • Configurazione anziché codice:riduci il debito tecnico spostando la logica nella configurazione anziché scrivere codice.
  • Semplifica la tua architettura. I flussi di lavoro stateful ti consentono di visualizzare e monitorare integrazioni di servizi complesse senza dipendenze aggiuntive.
  • Incorpora affidabilità e tolleranza agli errori. Controlla gli errori con la logica dei nuovi tentativi predefinita o personalizzata e la gestione degli errori anche quando altri sistemi non funzionano, spuntando ogni passaggio in Cloud Spanner per aiutarti a tenere traccia dei progressi.
  • Nessuna manutenzione. Scalabilità in base alle esigenze: non sono necessarie l'applicazione di patch o la manutenzione. Paga solo quando i tuoi flussi di lavoro vengono eseguiti, senza costi durante l'attesa o i tempi di inattività.

In questo lab configurerai un flusso di lavoro basato su eventi.

Cosa imparerai a fare

In questo lab imparerai a:

  • Configura l'argomento Pub/Sub ed Eventarc per attivare Workflows
  • Configura Workflow per effettuare chiamate API all'applicazione in esecuzione su GKE Autopilot
  • Configurare il workflow per pubblicare messaggi su Pub/Sub
  • Come eseguire query sui log strutturati di Workflows in Cloud Logging e utilizzando gcloud CLI

Prerequisiti

  • Questo lab presuppone la familiarità con gli ambienti della console Cloud e di Cloud Shell.
  • L'esperienza pregressa con GKE e Cloud Pub/Sub è utile, ma non obbligatoria.

2. Configurazione e requisiti

Configurazione del progetto Cloud

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (in genere è identificato come PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Configurazione dell'ambiente

Attiva Cloud Shell facendo clic sull'icona a destra della barra di ricerca.

8613854df02635a3.png

Clona il repository e vai alla directory, copia e incolla il comando riportato di seguito nel terminale e premi Invio:

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

Esegui il deployment delle dipendenze richieste eseguendo gke-lab-setup.sh.

Verranno create le seguenti risorse:

  • Cluster e istanza AlloyDB
  • Cluster GKE Autopilot
./gke-lab-setup.sh

Se ti viene richiesto di concedere l'autorizzazione, fai clic su "Autorizza" per continuare.

6356559df3eccdda.png

La configurazione richiederà circa 10 minuti.

Attendi il completamento dello script e visualizza l'output riportato di seguito prima di eseguire altri passaggi.

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

Rivedi il cluster GKE Autopilot

Imposta le variabili di ambiente del progetto:

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

Nell'ambito della configurazione iniziale, il cluster è stato creato utilizzando il comando riportato di seguito (non devi eseguire questo comando):

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

Esegui il comando per visualizzare il cluster GKE Autopilot creato:

gcloud container clusters list

Esempio di output:

772db9dd58172e0c.png

Esegui il comando per archiviare le credenziali per il cluster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Esegui il deployment di un'applicazione

Successivamente, eseguirai il deployment di un'applicazione di assistenza clienti. Si tratta di un microservizio basato su Java che utilizza il framework Quarkus.

Vai alla cartella cymbal-eats/customer-service ed esegui i comandi riportati di seguito per creare e caricare l'immagine container:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Imposta l'indirizzo IP privato di 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

Esegui i comandi riportati di seguito per creare l'oggetto Kubernetes Secrets per archiviare le credenziali del database che verranno utilizzate dall'applicazione Customer Service per connettersi al database:

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

Esegui il comando per sostituire CUSTOMER_SERVICE_IMAGE nel file deployment.yaml:

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

Esegui il comando per eseguire il deployment dell'applicazione:

kubectl apply -f customer-service-deployment.yaml

L'applicazione impiegherà qualche istante per passare allo stato RUNNING.

Esamina il file delle specifiche del deployment:

deployment.yaml.tmpl

Ecco la parte della configurazione che specifica le risorse necessarie per eseguire questa applicazione.

    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

Esegui il comando per creare l'IP esterno che verrà utilizzato nel workflow:

SERVICE_NAME=customer-service

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

Esegui il comando per verificare le risorse create:

kubectl get all

Esempio di output:

179a23bd33793924.png

4. Flusso di lavoro per la revisione

Concetti fondamentali di Workflows

Un workflow è costituito da una serie di passaggi descritti utilizzando la sintassi di Workflows( YAML o JSON).

Dopo la creazione, il workflow viene implementato, rendendolo pronto per l'esecuzione.

Un'esecuzione è una singola esecuzione della logica contenuta nella definizione di un workflow. Un workflow che non è stato eseguito non genera addebiti. Tutte le esecuzioni di un workflow sono indipendenti e la scalabilità rapida del prodotto consente un numero elevato di esecuzioni simultanee.

Controlli di esecuzione

  • Passaggi: per creare un workflow, definisci il steps e l'ordine di esecuzione desiderati utilizzando la sintassi di Workflows. Ogni workflow deve avere almeno un passaggio.
  • Condizioni: puoi utilizzare un blocco switch come meccanismo di selezione che consente al valore di un'espressione di controllare il flusso di esecuzione di un workflow.
  • Iterazioni: puoi utilizzare un loop for per scorrere una sequenza di numeri o una raccolta di dati, ad esempio un elenco o una mappa.
  • Subworkflow: un subworkflow funziona in modo simile a una routine o a una funzione in un linguaggio di programmazione, consentendoti di incapsulare un passaggio o un insieme di passaggi che il flusso di lavoro ripeterà più volte.

Attivazione delle esecuzioni

  • Manuale: puoi gestire i flussi di lavoro dalla console Google Cloud o dalla riga di comando utilizzando Google Cloud CLI.
  • Programmatico: le librerie client Cloud per l'API Workflows o l'API REST possono essere utilizzate per gestire i flussi di lavoro.
  • Pianificato: puoi utilizzare Cloud Scheduler per eseguire un workflow in base a una pianificazione specifica.

Argomenti di runtime

È possibile accedere ai dati passati in fase di runtime aggiungendo un campo params al flusso di lavoro principale (inserito in un blocco principale). Il blocco principale accetta un singolo argomento di qualsiasi tipo di dati JSON valido. Il campo params indica la variabile utilizzata dal workflow per memorizzare i dati che inserisci.

Logica del workflow

Se un cliente non esiste, il workflow effettuerà una chiamata API per creare prima un cliente e poi aggiornare i punti premio. In base all'importo totale dell'ordine, il flusso di lavoro selezionerà un moltiplicatore per calcolare i punti premio per il cliente. Per maggiori dettagli, vedi l'esempio riportato di seguito.

    - 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. Configurare ed eseguire il deployment di Workflow

Esegui il comando per visualizzare l'indirizzo IP esterno del servizio:

kubectl get svc

Esempio di output:

fe5cfec2bc836a5f.png

Imposta la variabile di ambiente riportata di seguito utilizzando il valore di IP esterno dell'output precedente.

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

Sostituisci l'URL dell'applicazione del servizio clienti nel modello di workflow:

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

Imposta la posizione per le variabili di ambiente del servizio Workflows e del progetto:

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 un service account personalizzato per il workflow con le seguenti autorizzazioni:

  • Chiamare le API di registrazione delle chiamate
  • Pubblica messaggi nell'argomento 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"

Esegui il deployment del workflow. Il workflow è configurato per utilizzare il service account creato nel passaggio precedente:

export WORKFLOW_NAME=rewardsWorkflow

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

Controlla l'origine del workflow e altri dettagli(scheda Trigger). Al momento non sono configurati trigger per l'esecuzione di questo workflow. Lo configurerai nel passaggio successivo.

66ba7ebbde76d5a6.png

6. Configura argomenti Pub/Sub e trigger Eventarc

Successivamente, creerai due argomenti Pub/Sub e configurerai un trigger Eventarc.

L'applicazione Order Service pubblicherà messaggi in order-topic con informazioni sui nuovi ordini.

Il flusso di lavoro pubblicherà messaggi in order-points-topic con informazioni sui punti premio dell'ordine e sull'importo totale. Order Service(la parte di questo lab non sottoposta a deployment) espone un endpoint utilizzato dalla sottoscrizione push per order-points-topic, per aggiornare i punti premio e l'importo totale per ordine.

Crea nuovi argomenti 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

Imposta la località per il servizio Eventarc:

gcloud config set eventarc/location ${REGION}

Crea un service account personalizzato che verrà utilizzato dal trigger Eventarc per eseguire i workflow.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Concedi all'account di servizio l'accesso per eseguire i workflow.

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

Crea un trigger Eventarc per ascoltare i messaggi Pub/Sub e inviarli 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

Esempio di output:

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.

Esamina il trigger Eventarc creato.

bda445561ad5f4.png

Rivedi la sottoscrizione creata per il trigger.

3fccdda7d5526597.png

Rivedi le modifiche sul lato workflow. È stato aggiunto un nuovo trigger.

23d338abc16eaac8.png

7. Testa il flusso di lavoro

6c0606022b76f79d.png

Per simulare il servizio ordini, invierai messaggi all'argomento Pub/Sub da Cloud Shell e verificherai i log del servizio clienti nella console Google 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}]}'

Esempio di output:

messageIds:
- '5063709859203105'

Rivedi i dettagli di esecuzione del flusso di lavoro e i log.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Logging strutturato del workflow

Il workflow è configurato per scrivere log strutturati in formato JSON. I log vengono scritti utilizzando l'API Cloud Logging, la risorsa workflows.googleapis.com/Workflow e con il nome del log projects/${PROJECT_ID}/logs/Workflows.

Rivedi la configurazione del logging di seguito.

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

Apri Esplora log in Cloud Console ed esegui una query per trovare gli ordini elaborati con un importo totale superiore a 2 $.

Per mostrare il campo della query di ricerca, fai clic su "Mostra query".

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"

Esempio di output:

9093f87159f1b928.png

Apri Cloud Shell e utilizza gcloud CLI per leggere i log con i comandi riportati di seguito.

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

Esempio di output utilizzando il formato table:

35d5fd851ecde60.png

Esegui il comando seguente per restituire i log in 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

Esempio di output utilizzando il formato json:

ac7421548ea9a9f2.png

9. Esaminare le registrazioni dei clienti

(Passaggi facoltativi)

Esegui i comandi riportati di seguito per impostare la variabile di ambiente URL del servizio clienti.

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

curl $CUSTOMER_SERVICE_URL/customer | jq

Esempio di output:

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

Esegui il comando per pubblicare un nuovo ordine più volte e verifica i punti premio del cliente con il comando curl.

Pubblica il messaggio di nuovo ordine:

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 i punti premio del cliente:

curl $CUSTOMER_SERVICE_URL/customer | jq

Esegui il comando riportato di seguito per verificare la presenza dei log più recenti:

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. Complimenti!

Congratulazioni, hai completato il codelab.

Argomenti trattati:

  • Come configurare l'argomento Pub/Sub ed Eventarc per attivare Workflows
  • Come configurare Workflow per effettuare chiamate API all'applicazione in esecuzione su GKE Autopilot
  • Come configurare Workflow per pubblicare messaggi in Pub/Sub
  • Come eseguire query sui log strutturati di Workflows in Cloud Logging e utilizzando gcloud CLI

Qual è il passaggio successivo?

Esplora altri codelab di Cymbal Eats:

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.