Como configurar o Eventarc para acionar fluxos de trabalho que se integram ao Autopilot do GKE e ao Pub/Sub

Como configurar o Eventarc para acionar fluxos de trabalho que se integram ao Autopilot do GKE e ao Pub/Sub

Sobre este codelab

subjectÚltimo fev. 2, 2023 atualizado
account_circleEscrito por Andrey Shakirov, Christopher Grant

1. Visão geral

Neste laboratório, você vai criar um gatilho do Eventarc que conecta um tópico do Pub/Sub ao serviço Workflows. O Eventarc permite desacoplar a comunicação entre serviços, tornando sua solução mais extensível e orientada a eventos. Você vai criar um fluxo de trabalho com várias etapas para executar um processo de negócios e calcular os pontos de recompensa do cliente por fazer pedidos na Cymbal Eats. O fluxo de trabalho vai enviar várias solicitações para um aplicativo em execução no Autopilot do GKE e publicar uma mensagem no tópico do Pub/Sub para notificar o aplicativo do serviço de pedidos sobre os pontos de recompensa calculados.

6c0606022b76f79d.png

O que é o Autopilot do GKE?

O Autopilot do GKE é um modo de operação em que o Google gerencia a configuração do cluster, incluindo nós, escalonamento, segurança e outras configurações predefinidas. Os clusters do Autopilot são otimizados para executar a maioria das cargas de trabalho de produção e provisionar recursos de computação com base nos manifestos do Kubernetes. A configuração simplificada segue as práticas recomendadas do GKE e as recomendações para configuração de clusters e cargas de trabalho, escalonabilidade e segurança. Para conferir uma lista de configurações integradas, consulte a tabela Comparação entre o Autopilot e o Standard.

Com o GKE Standard, os usuários são responsáveis por gerenciar os nós de trabalho e a configuração do pool de nós, enquanto o restante é feito pelo GKE.

Responsabilidades do cliente e do Google na execução no modo GKE Standard

85500aad65f87437.png

No GKE Autopilot, a configuração e o gerenciamento do pool de nós é responsabilidade do Google. Isso permite que você se concentre em aplicativos e serviços executados no cluster.

O que é o Eventarc?

O Eventarc permite que você crie arquiteturas orientadas a eventos sem precisar implementar, personalizar ou manter a infraestrutura subjacente. O Eventarc oferece uma solução padronizada para gerenciar o fluxo de alterações de estado, chamadas de eventos, entre microsserviços separados. Quando acionado, o Eventarc encaminha esses eventos usando assinaturas do Pub/Sub para vários destinos (por exemplo, Workflows, Cloud Run) enquanto gerencia a entrega, a segurança, a autorização, a observabilidade e o tratamento de erros para você.

Provedores de eventos do Google

  • Mais de 90 provedores do Google Cloud. Esses provedores enviam eventos diretamente da origem (Cloud Storage, por exemplo) ou pelas entradas dos Registros de auditoria do Cloud.
  • provedores do Pub/Sub. Esses provedores enviam eventos ao Eventarc usando mensagens do Pub/Sub.

Provedores terceirizados

Provedores terceirizados são entidades que não são do Google que oferecem uma fonte do Eventarc.

Acionadores do Eventarc

  • Eventos do Cloud Pub/Sub. O Eventarc pode ser acionado por mensagens publicadas em tópicos do Pub/Sub.
  • Eventos de Registros de auditoria do Cloud (CAL). Os Registros de auditoria do Cloud fornecem registros de auditoria de atividade do administrador e acesso a dados para cada projeto, pasta e organização do Cloud.
  • Eventos diretos. O Eventarc pode ser acionado por vários eventos diretos, como uma atualização de um bucket do Cloud Storage ou de um modelo da Configuração remota do Firebase.

Destinos de evento

  • Fluxos de trabalho
  • Cloud Run
  • GKE
  • Cloud Functions( 2nd gen)

c7ca054200edf1b3.png

O que é o Workflows?

O Workflows é um serviço totalmente gerenciado que permite integrar microsserviços, tarefas e APIs. O Workflows é um serviço sem servidor e será escalonado para atender à sua demanda.

Casos de uso dos fluxos de trabalho:

  • Fluxos de trabalho orientados por eventos são executados em acionadores definidos. Por exemplo, quando um novo pedido é enviado e você quer calcular os pontos de fidelidade do cliente. Ou, quando um pedido é cancelado, o evento pode ser publicado e todos os serviços interessados o processarão.
  • Os fluxos de trabalho de jobs em lote executam jobs regularmente usando o Cloud Scheduler. Por exemplo, um job noturno para verificar se há itens de menu com status de falha e excluí-los.

O Workflows é ideal para fluxos de trabalho que orquestram serviços. É possível automatizar processos que incluem espera e novas tentativas por até um ano.

Benefícios do Workflows:

  • Configuração sobre código:reduza o débito técnico movendo a lógica para a configuração, em vez de escrever código.
  • Simplifique sua arquitetura. Os fluxos de trabalho com estado permitem visualizar e monitorar integrações de serviços complexas sem outras dependências.
  • Incorporar confiabilidade e tolerância a falhas. Controle as falhas com lógica de repetição padrão ou personalizada e tratamento de erros, mesmo quando outros sistemas falharem, marcando cada etapa para o Cloud Spanner para ajudar você a acompanhar o progresso.
  • Manutenção zero. Escalone conforme necessário: não é necessário corrigir nem manter nada. Pague somente quando seus fluxos de trabalho forem executados, sem custo enquanto você aguarda ou está inativo.

Neste laboratório, você vai configurar um fluxo de trabalho orientado por eventos.

O que você vai aprender

Você vai aprender a:

  • Configurar o tópico do Pub/Sub e o Eventarc para acionar fluxos de trabalho
  • Configure o fluxo de trabalho para fazer chamadas de API a um aplicativo em execução no Autopilot do GKE
  • Configurar o fluxo de trabalho para publicar mensagens no Pub/Sub
  • Como consultar registros estruturados do Workflows no Cloud Logging e usar a gcloud CLI.

Pré-requisitos

  • Para fazer este laboratório, é preciso ter familiaridade com o console do Cloud e os ambientes do Cloud Shell.
  • Ter experiência anterior com o GKE e o Cloud Pub/Sub é útil, mas não é obrigatório.

2. Configuração e requisitos

Configuração do projeto do Google Cloud

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google Você pode atualizar a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. normalmente você não se importa com o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, que normalmente é identificado como PROJECT_ID. Se você não gostar do ID gerado, poderá gerar outro ID aleatório. Como alternativa, você pode tentar o seu próprio e ver se ele está disponível. Ela não pode ser alterada após essa etapa e permanecerá durante a duração do projeto.
  • Para sua informação, há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar faturamento além deste tutorial, exclua os recursos criados ou exclua o projeto inteiro. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Configuração do ambiente

Ative o Cloud Shell clicando no ícone à direita da barra de pesquisa.

8613854df02635a3.png

Clone o repositório, acesse o diretório, copie e cole o comando abaixo no terminal e pressione Enter:

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

Implante as dependências necessárias executando gke-lab-setup.sh.

Os seguintes recursos serão criados:

  • Cluster e instância do AlloyDB
  • Cluster do Autopilot do GKE
./gke-lab-setup.sh

Se for preciso autorizar, clique em "Autorizar" para continuar.

6356559df3eccdda.png

A configuração levará cerca de 10 minutos.

Aguarde a conclusão do script e a saída abaixo antes de executar outras etapas.

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 do Autopilot do GKE

Analisar o cluster do Autopilot do GKE

Defina as variáveis de ambiente do projeto:

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 da configuração inicial, o cluster foi criado usando o comando abaixo. Você não precisa executar este comando:

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

Execute o comando para visualizar o cluster do Autopilot do GKE criado:

gcloud container clusters list

Exemplo de resposta:

772db9dd58172e0c.png

Execute o comando para armazenar as credenciais do cluster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Implementar um aplicativo

Agora você implantará um aplicativo de atendimento ao cliente. Esse é um microsserviço baseado em Java que usa o framework Quarkus (em inglês).

Navegue até a pasta cymbal-eats/customer-service e execute os comandos abaixo para criar e fazer upload da imagem do contêiner:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Defina o endereço IP particular do 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

Execute os comandos abaixo para criar o objeto de secrets do Kubernetes e armazenar as credenciais do banco de dados que serão usadas pelo aplicativo de atendimento ao cliente para se conectar ao banco de dados:

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

Execute o comando para substituir CUSTOMER_SERVICE_IMAGE no arquivo deployment.yaml:

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

Execute o comando para implantar o aplicativo:

kubectl apply -f customer-service-deployment.yaml

Levará alguns instantes para o aplicativo passar para o estado RUNNING.

Revise o arquivo de especificação de implantação:

deployment.yaml.tmpl

Esta é a parte da configuração que especifica os recursos necessários para executar este aplicativo.

    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

Execute o comando para criar o IP externo que será usado no fluxo de trabalho:

SERVICE_NAME=customer-service

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

Execute o comando para verificar os recursos criados:

kubectl get all

Exemplo de resposta:

179a23bd33793924.png

4. Fluxo de trabalho de revisão

Conceitos principais do Workflows

Um fluxo de trabalho consiste em uma série de etapas descritas usando a sintaxe do Workflows( YAML ou JSON).

Depois que um fluxo de trabalho é criado, ele é implantado, o que o deixa pronto para execução.

Uma execução é uma única execução da lógica contida na definição de um fluxo de trabalho. Um fluxo de trabalho que não foi executado não gera cobranças. Todas as execuções de fluxo de trabalho são independentes, e o escalonamento rápido do produto permite um alto número de execuções simultâneas.

Controles de execução

  • Etapas: para criar um fluxo de trabalho, defina o steps desejado e a ordem de execução usando a sintaxe do Workflows. Todo fluxo de trabalho precisa ter pelo menos uma etapa.
  • Condições: é possível usar um bloco switch como mecanismo de seleção que permite que o valor de uma expressão controle o fluxo de execução de um fluxo de trabalho.
  • Iterações: use uma repetição for para iterar em uma sequência de números ou em uma coleção de dados, como uma lista ou um mapa.
  • Subfluxos de trabalho: funcionam de maneira semelhante a uma rotina ou função em uma linguagem de programação, permitindo encapsular uma etapa ou um conjunto de etapas que seu fluxo de trabalho repetirá várias vezes.

Como acionar execuções

  • Manual: é possível gerenciar fluxos de trabalho no console do Google Cloud ou na linha de comando usando a CLI do Google Cloud.
  • Programática: as bibliotecas de cliente do Cloud para a API Workflows ou a API REST podem ser usadas para gerenciar fluxos de trabalho.
  • Programado: é possível usar o Cloud Scheduler para executar um fluxo de trabalho em uma programação específica.

Argumentos do ambiente de execução

Para acessar os dados transmitidos no momento da execução, adicione um campo params ao seu fluxo de trabalho principal (colocado em um bloco principal). O bloco principal aceita um único argumento, que é qualquer tipo de dados JSON válido. O campo "params" nomeia a variável que o fluxo de trabalho usa para armazenar os dados transmitidos.

Lógica do fluxo de trabalho

Se um cliente não existir, o fluxo de trabalho vai fazer uma chamada de API para criar um cliente e depois atualizar os pontos de recompensa. Com base no valor total do pedido, o fluxo de trabalho seleciona um multiplicador para calcular os pontos de recompensa para o cliente. Confira o exemplo abaixo para mais detalhes.

    - 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. Configurar e implantar o fluxo de trabalho

Execute o comando para ver o endereço IP externo do serviço:

kubectl get svc

Exemplo de resposta:

fe5cfec2bc836a5f.png

Defina a variável de ambiente abaixo usando o valor de IP externo da saída anterior.

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

Substitua o URL do aplicativo de atendimento ao cliente no modelo do fluxo de trabalho:

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

Defina o local do serviço do Workflows e das variáveis de ambiente do projeto:

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

Crie uma conta de serviço personalizada para o fluxo de trabalho com as seguintes permissões:

  • APIs de registro de chamadas
  • Publicar mensagens no tópico do PubSub
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"

Implantar fluxo de trabalho. O fluxo de trabalho é configurado para usar a conta de serviço criada na etapa anterior:

export WORKFLOW_NAME=rewardsWorkflow

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

Revise a origem do fluxo de trabalho e outros detalhes(guia "Gatilhos"). No momento, não há acionadores configurados para executar esse fluxo de trabalho. Você vai configurar isso na próxima etapa.

66ba7ebbde76d5a6.png

6. Configurar tópicos do Pub/Sub e o gatilho do Eventarc

Em seguida, você vai criar dois tópicos do Pub/Sub e configurar um gatilho do Eventarc.

O aplicativo do serviço de pedidos publicará mensagens em order-topic com informações sobre novos pedidos.

O fluxo de trabalho publicará mensagens em order-points-topic com informações sobre os pontos de recompensa do pedido e o valor total. O serviço de pedidos(parte não implantada deste laboratório) expõe um endpoint usado pela assinatura push de order-points-topic, para atualizar os pontos de recompensa e o valor total por pedido.

Crie novos tópicos do 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

Defina o local do serviço do Eventarc:

gcloud config set eventarc/location ${REGION}

Crie uma conta de serviço personalizada que será usada pelo gatilho do Eventarc para executar fluxos de trabalho.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Conceda acesso à conta de serviço para executar fluxos de trabalho.

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

Criar um gatilho do Eventarc para detectar mensagens do Pub/Sub e entregá-las ao 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

Exemplo de resposta:

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.

Revise o acionador do Eventarc criado.

bda445561ad5f4.png

Analise a assinatura criada para o acionador.

3fccdda7d5526597.png

Analisar as mudanças no fluxo de trabalho. Um novo acionador foi adicionado.

23d338abc16eaac8.png

7. Fluxo de trabalho de teste

6c0606022b76f79d.png

Para simular o serviço de pedido, envie mensagens para o tópico do Pub/Sub pelo Cloud Shell e verifique os registros do atendimento ao cliente no console do 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}]}'

Exemplo de resposta:

messageIds:
- '5063709859203105'

Revise os detalhes e os registros de execução do fluxo de trabalho.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Geração de registros estruturados de fluxo de trabalho

O fluxo de trabalho está configurado para gravar registros estruturados no formato JSON. Os registros são gravados usando a API Cloud Logging, o recurso workflows.googleapis.com/Workflow e com o nome de registro projects/${PROJECT_ID}/logs/Workflows.

Revise a configuração da geração de registros abaixo.

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

Abra a Análise de registros no console do Cloud e execute uma consulta para encontrar pedidos processados com um valor total superior a US $2.

Para mostrar o campo de consulta de pesquisa, clique em "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"

Exemplo de resposta:

9093f87159f1b928.png

Abra o Cloud Shell e use a CLI gcloud para ler registros com os comandos abaixo.

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

Exemplo de saída usando o formato table:

35d5fd851ecde60.png

Execute o comando abaixo para retornar os registros no 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

Exemplo de saída usando o formato json:

ac7421548ea9a9f2.png

9. Analisar os registros do cliente

(Etapas opcionais)

Execute os comandos abaixo para definir a variável de ambiente do URL de atendimento ao cliente.

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

curl $CUSTOMER_SERVICE_URL/customer | jq

Exemplo de resposta:

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

Execute um comando para publicar um novo pedido várias vezes e verificar os pontos de recompensa do cliente com o comando curl.

Publicar nova mensagem do 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}]}'

Verifique os pontos de recompensa do cliente:

curl $CUSTOMER_SERVICE_URL/customer | jq

Execute o comando abaixo para verificar os registros mais recentes:

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. Parabéns!

Parabéns, você concluiu o codelab.

O que aprendemos:

  • Como configurar o tópico do Pub/Sub e o Eventarc para acionar fluxos de trabalho
  • Como configurar o fluxo de trabalho para fazer chamadas de API a um aplicativo em execução no Autopilot do GKE
  • Como configurar o fluxo de trabalho para publicar mensagens no Pub/Sub
  • Como consultar registros estruturados do Workflows no Cloud Logging e usar a gcloud CLI.

O que vem em seguida:

Conheça outros codelabs da Cymbal Eats:

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.