Konfigurowanie Eventarc w celu aktywowania przepływów pracy integrujących się z Autopilotem i Pub/Sub w GKE

1. Przegląd

W tym module utworzysz aktywator Eventarc, który łączy temat Pub/Sub z usługą Workflows. Eventarc umożliwia odłączenie komunikacji między usługami, dzięki czemu rozwiązanie jest bardziej rozszerzalne i oparte na zdarzeniach. Utworzysz przepływ pracy, który obejmuje kilka kroków wykonywania procesu biznesowego obliczania punktów w programie lojalnościowym klienta za zamówienie w Cymbal Eats. Przepływ pracy wyśle wiele żądań do aplikacji działającej w GKE Autopilot i opublikuje wiadomość w temacie Pub/Sub, aby powiadomić aplikację Order Service o obliczonych punktach w programie lojalnościowym.

6c0606022b76f79d.png

Czym jest Autopilot w GKE?

Autopilot w GKE to tryb działania, w którym Google zarządza konfiguracją klastra, w tym węzłami, skalowaniem, zabezpieczeniami i innymi wstępnie skonfigurowanymi ustawieniami. Klastry z Autopilotem są zoptymalizowane pod kątem uruchamiania większości zbiorów zadań produkcyjnych i udostępniania zasobów obliczeniowych na podstawie Twoich plików manifestu Kubernetes. Uproszczona konfiguracja jest zgodna ze sprawdzonymi metodami i rekomendacjami GKE dotyczącymi konfiguracji klastra i zbioru zadań, skalowalności oraz bezpieczeństwa. Listę wbudowanych ustawień znajdziesz w tabeli Porównanie trybu Autopilota i standardowego.

W przypadku GKE Standard użytkownicy są odpowiedzialni za zarządzanie węzłami roboczymi i konfiguracją puli węzłów, a resztą zajmuje się GKE.

Odpowiedzialność klienta i Google podczas korzystania z GKE w trybie Standard

85500aad65f87437.png

W przypadku Autopilota w GKE za konfigurację puli węzłów i zarządzanie nią odpowiada Google. Dzięki temu możesz skupić się na aplikacjach i usługach działających w klastrze.

Czym jest Eventarc?

Eventarc umożliwia tworzenie architektur opartych na zdarzeniach bez konieczności wdrażania, dostosowywania ani utrzymywania infrastruktury bazowej. Eventarc oferuje standardowe rozwiązanie do zarządzania przepływem zmian stanu (nazywanych zdarzeniami) między odłączonymi mikroserwisami. Po aktywowaniu Eventarc przekierowuje te zdarzenia przez subskrypcje Pub/Sub do różnych miejsc docelowych (np. Workflows, Cloud Run), a jednocześnie zarządza przesyłaniem, zabezpieczeniami, autoryzacją, dostrzegalnością i obsługą błędów.

Dostawcy wydarzeń Google

  • Ponad 90 dostawców Google Cloud. Ci dostawcy wysyłają zdarzenia bezpośrednio ze źródła (np. Cloud Storage) lub za pomocą wpisów w logach kontrolnych Cloud.
  • dostawców Pub/Sub, Ci dostawcy wysyłają zdarzenia do Eventarc za pomocą wiadomości Pub/Sub.

Dostawcy zewnętrzni

Dostawcy zewnętrzni to podmioty spoza Google, które oferują źródło Eventarc.

Aktywatory Eventarc

  • Zdarzenia Cloud Pub/Sub Eventarc może być wywoływany przez wiadomości publikowane w tematach Pub/Sub.
  • Zdarzenia logów kontrolnych Cloud (CAL). Logi kontrolne Cloud Audit Logs zawierają logi kontrolne aktywności administracyjnej i dostępu do danych dla każdego projektu w chmurze, folderu i organizacji.
  • Zdarzenia bezpośrednie Eventarc może być wywoływany przez różne zdarzenia bezpośrednie, takie jak aktualizacja zasobnika Cloud Storage lub aktualizacja szablonu Zdalnej konfiguracji Firebase.

Miejsca docelowe zdarzeń

  • Przepływy pracy
  • Cloud Run
  • GKE
  • Cloud Functions( 2 generacji)

c7ca054200edf1b3.png

Co to jest Workflows?

Workflows to w pełni zarządzana usługa, która umożliwia integrację mikroserwisów, zadań i interfejsów API. Workflows to usługa bezserwerowa, która skaluje się w zależności od Twoich potrzeb.

Przykłady zastosowań Workflows:

  • Przepływy pracy oparte na zdarzeniach są wykonywane na podstawie zdefiniowanych aktywatorów. Na przykład gdy zostanie przesłane nowe zamówienie i chcesz obliczyć punkty lojalnościowe klienta. Gdy zamówienie zostanie anulowane, można opublikować zdarzenie, a wszystkie zainteresowane usługi je przetworzą.
  • Przepływy pracy zadań wsadowych uruchamiają zadania regularnie za pomocą usługi Cloud Scheduler. Może to być na przykład zadanie wykonywane co noc, które sprawdza, czy w menu są pozycje w stanie nieudanym, i usuwa je.

Workflows to idealne rozwiązanie w przypadku przepływów pracy, które zarządzają usługami. Możesz zautomatyzować procesy, które obejmują oczekiwanie i ponawianie prób przez okres do roku.

Korzyści z przepływów pracy:

  • Konfiguracja zamiast kodu: zmniejsz dług techniczny, przenosząc logikę do konfiguracji zamiast pisać kod.
  • Uprość architekturę. Przepływy pracy z zachowaniem stanu umożliwiają wizualizację i monitorowanie złożonych integracji usług bez dodatkowych zależności.
  • Zapewnij niezawodność i odporność na awarie. Kontroluj błędy za pomocą domyślnej lub niestandardowej logiki ponawiania i obsługi błędów, nawet gdy inne systemy ulegną awarii. Zapisuj każdy krok w Cloud Spanner, aby śledzić postępy.
  • Bezobsługowość Skalowanie w miarę potrzeb: nie musisz instalować poprawek ani utrzymywać systemu. Płać tylko wtedy, gdy przepływy pracy są uruchomione. Gdy czekają lub są nieaktywne, nie ponosisz żadnych kosztów.

W tym laboratorium skonfigurujesz przepływ pracy oparty na zdarzeniach.

Czego się nauczysz

W tym module nauczysz się:

  • Konfigurowanie tematu Pub/Sub i Eventarc do aktywowania przepływów pracy
  • Konfigurowanie przepływu pracy do wywoływania interfejsów API aplikacji działającej w GKE Autopilot
  • Konfigurowanie przepływu pracy do publikowania wiadomości w Pub/Sub
  • Jak wykonywać zapytania dotyczące logów strukturalnych przepływów pracy w Cloud Logging i za pomocą interfejsu wiersza poleceń gcloud

Wymagania wstępne

  • Zakładamy, że użytkownik zna środowiska konsoli Cloud i Cloud Shell.
  • Wcześniejsze doświadczenie z GKE i Cloud Pub/Sub może być pomocne, ale nie jest wymagane.

2. Konfiguracja i wymagania

Konfigurowanie projektu w Google Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

8613854df02635a3.png

Sklonuj repozytorium i przejdź do katalogu. Skopiuj i wklej poniższe polecenie do terminala, a potem naciśnij Enter:

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

Wdróż wymagane zależności, uruchamiając polecenie gke-lab-setup.sh.

Zostaną utworzone te zasoby:

  • Klaster i instancja AlloyDB
  • Klaster GKE Autopilot
./gke-lab-setup.sh

Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

6356559df3eccdda.png

Konfiguracja zajmie około 10 minut.

Zanim wykonasz kolejne kroki, poczekaj na zakończenie działania skryptu i wyświetlenie poniższych wyników.

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. Klaster GKE z Autopilotem

Sprawdź klaster GKE z Autopilotem

Ustaw zmienne środowiskowe projektu:

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

W ramach konfiguracji początkowej klaster został utworzony za pomocą poniższego polecenia (nie musisz go uruchamiać):

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

Uruchom to polecenie, aby wyświetlić utworzony klaster GKE w trybie Autopilota:

gcloud container clusters list

Przykładowe dane wyjściowe:

772db9dd58172e0c.png

Uruchom polecenie, aby zapisać dane logowania do klastra:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Wdrażanie aplikacji

Następnie wdrożysz aplikację obsługi klienta. Jest to mikroserwis oparty na Javie, który korzysta z platformy Quarkus.

Otwórz folder cymbal-eats/customer-service i uruchom poniższe polecenia, aby utworzyć i przesłać obraz kontenera:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Ustaw prywatny adres IP 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

Uruchom poniższe polecenia, aby utworzyć obiekt tajnych danych Kubernetes do przechowywania danych logowania do bazy danych, które będą używane przez aplikację obsługi klienta do łączenia się z bazą danych:

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

Uruchom to polecenie, aby zastąpić CUSTOMER_SERVICE_IMAGE w pliku deployment.yaml:

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

Uruchom polecenie, aby wdrożyć aplikację:

kubectl apply -f customer-service-deployment.yaml

Przejście aplikacji do stanu URUCHOMIONA może chwilę potrwać.

Sprawdź plik specyfikacji wdrożenia:

deployment.yaml.tmpl

Oto część konfiguracji, która określa zasoby wymagane do uruchomienia tej aplikacji.

    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

Uruchom polecenie, aby utworzyć zewnętrzny adres IP, który będzie używany w przepływie pracy:

SERVICE_NAME=customer-service

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

Uruchom to polecenie, aby sprawdzić utworzone zasoby:

kubectl get all

Przykładowe dane wyjściowe:

179a23bd33793924.png

4. Sprawdzanie przepływu pracy

Najważniejsze pojęcia dotyczące Workflows

Przepływ pracy składa się z szeregu kroków opisanych za pomocą składni przepływów pracy( YAML lub JSON).

Po utworzeniu przepływu pracy jest on wdrażany, co oznacza, że jest gotowy do wykonania.

Wykonanie to jednorazowe uruchomienie logiki zawartej w definicji przepływu pracy. Przepływ pracy, który nie został wykonany, nie generuje żadnych opłat. Wszystkie wykonania przepływu pracy są niezależne, a szybkie skalowanie usługi umożliwia dużą liczbę równoczesnych wykonań.

Opcje wykonywania

  • Kroki – aby utworzyć przepływ pracy, zdefiniuj żądane steps i kolejność wykonania za pomocą składni Workflows. Każdy przepływ pracy musi mieć co najmniej 1 krok.
  • Warunki – możesz użyć bloku switch jako mechanizmu wyboru, który umożliwia sterowanie przepływem wykonania przepływu pracy za pomocą wartości wyrażenia.
  • Iteracje – możesz użyć pętli for, aby iterować sekwencję liczb lub kolekcję danych, np. listę lub mapę.
  • Podprocesy – podproces działa podobnie do procedury lub funkcji w języku programowania, umożliwiając enkapsulację kroku lub zestawu kroków, które Twój proces będzie powtarzać wielokrotnie.

Uruchamianie wykonań

  • Ręcznie – przepływami pracy możesz zarządzać w konsoli Google Cloud lub w wierszu poleceń za pomocą Google Cloud CLI.
  • Zautomatyzowane – do zarządzania przepływami pracy można używać bibliotek klienta Cloud dla interfejsu Workflows API lub interfejsu REST API.
  • Zaplanowany – możesz użyć usługi Cloud Scheduler, aby uruchamiać przepływ pracy zgodnie z określonym harmonogramem.

Argumenty środowiska wykonawczego

Do danych przekazywanych w czasie działania można uzyskać dostęp, dodając pole params do głównego przepływu pracy (umieszczonego w bloku głównym). Główny blok przyjmuje jeden argument, który jest dowolnym prawidłowym typem danych JSON. Pole params zawiera nazwę zmiennej, której przepływ pracy używa do przechowywania przekazywanych danych.

Logika przepływu pracy

Jeśli klient nie istnieje, przepływ pracy wywoła interfejs API, aby najpierw utworzyć klienta, a potem zaktualizować punkty za nagrody. Na podstawie łącznej kwoty zamówienia proces wybierze mnożnik, aby obliczyć punkty za nagrody dla klienta. Szczegółowe informacje znajdziesz w przykładzie poniżej.

    - 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. Konfigurowanie i wdrażanie przepływu pracy

Uruchom polecenie, aby wyświetlić zewnętrzny adres IP usługi:

kubectl get svc

Przykładowe dane wyjściowe:

fe5cfec2bc836a5f.png

Ustaw zmienną środowiskową poniżej, używając wartości zewnętrznego adresu IP z poprzedniego wyniku.

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

Zastąp adres URL aplikacji Customer Service w szablonie przepływu pracy:

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

Ustaw lokalizację usługi Workflows i zmienne środowiskowe projektu:

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

Utwórz niestandardowe konto usługi na potrzeby przepływu pracy z tymi uprawnieniami:

  • Wywoływanie interfejsów Call Logging API
  • Publikowanie wiadomości w temacie 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"

Wdróż przepływ pracy. Przepływ pracy jest skonfigurowany tak, aby używać konta usługi utworzonego w poprzednim kroku:

export WORKFLOW_NAME=rewardsWorkflow

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

Sprawdź źródło przepływu pracy i inne szczegóły(karta Wyzwalacze). Obecnie nie ma skonfigurowanych aktywatorów do uruchamiania tego przepływu pracy. Skonfigurujesz go w następnym kroku.

66ba7ebbde76d5a6.png

6. Konfigurowanie tematów Pub/Sub i aktywatora Eventarc

Następnie utworzysz 2 tematy Pub/Sub i skonfigurujesz 1 aktywator Eventarc.

Aplikacja Order Service będzie publikować w order-topic wiadomości z informacjami o nowych zamówieniach.

Przepływ pracy będzie publikować wiadomości w order-points-topic z informacjami o punktach w programie lojalnościowym za zamówienie i łącznej kwocie. Usługa zamówień(nie jest wdrażana w ramach tego laboratorium) udostępnia punkt końcowy, który jest używany przez subskrypcję Push order-points-topic, do aktualizowania punktów w programie lojalnościowym i łącznej kwoty za zamówienie.

Utwórz nowe tematy 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

Ustaw lokalizację usługi Eventarc:

gcloud config set eventarc/location ${REGION}

Utwórz niestandardowe konto usługi, które będzie używane przez aktywator Eventarc do wykonywania przepływów pracy.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Przyznaj kontu usługi dostęp do wykonywania przepływów pracy.

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

Utwórz aktywator Eventarc, który będzie nasłuchiwać wiadomości Pub/Sub i dostarczać je do 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

Przykładowe dane wyjściowe:

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.

Sprawdź utworzony aktywator Eventarc.

bda445561ad5f4.png

Sprawdź utworzoną subskrypcję pod kątem aktywatora.

3fccdda7d5526597.png

Sprawdź zmiany po stronie przepływu pracy. Dodano nowy aktywator.

23d338abc16eaac8.png

7. Testowanie przepływu pracy

6c0606022b76f79d.png

Aby zasymulować usługę zamówień, wyślesz wiadomości do tematu Pub/Sub z Cloud Shell i sprawdzisz logi usługi klienta w konsoli 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}]}'

Przykładowe dane wyjściowe:

messageIds:
- '5063709859203105'

Sprawdź szczegóły wykonania przepływu pracy i logi.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Uporządkowane logowanie przepływu pracy

Przepływ pracy jest skonfigurowany do zapisywania dzienników strukturalnych w formacie JSON. Logi są zapisywane przy użyciu interfejsu Cloud Logging API, zasobu workflows.googleapis.com/Workflow i nazwy logu projects/${PROJECT_ID}/logs/Workflows.

Sprawdź poniżej konfigurację logowania.

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

Otwórz Eksplorator logów w konsoli Cloud i uruchom zapytanie, aby znaleźć przetworzone zamówienia o łącznej kwocie większej niż 2 USD.

Aby wyświetlić pole zapytania wyszukiwania, kliknij „Pokaż zapytanie”.

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"

Przykładowe dane wyjściowe:

9093f87159f1b928.png

Otwórz Cloud Shell i użyj gcloud CLI do odczytywania logów za pomocą poniższych poleceń.

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

Przykładowe dane wyjściowe w formacie table:

35d5fd851ecde60.png

Aby zwrócić logi w formacie JSON, uruchom to polecenie:

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

Przykładowe dane wyjściowe w formacie json:

ac7421548ea9a9f2.png

9. Sprawdzanie danych klientów

(Opcjonalne kroki)

Uruchom polecenia poniżej, aby ustawić zmienną środowiskową adresu URL obsługi klienta.

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

curl $CUSTOMER_SERVICE_URL/customer | jq

Przykładowe dane wyjściowe:

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

Uruchom polecenie, aby opublikować nowe zamówienie kilka razy, i sprawdź punkty w programie lojalnościowym klienta za pomocą polecenia curl.

Opublikuj wiadomość o nowym zamówieniu:

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

Sprawdź punkty w programie lojalnościowym klienta:

curl $CUSTOMER_SERVICE_URL/customer | jq

Aby sprawdzić najnowsze logi, uruchom to polecenie:

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

Gratulacje! Codelab został ukończony.

Omówione zagadnienia:

  • Konfigurowanie tematu Pub/Sub i Eventarc do aktywowania przepływów pracy
  • Konfigurowanie przepływu pracy do wykonywania wywołań interfejsu API w aplikacji działającej w GKE Autopilot
  • Jak skonfigurować przepływ pracy, aby publikować wiadomości w Pub/Sub
  • Jak wykonywać zapytania dotyczące logów strukturalnych przepływów pracy w Cloud Logging i za pomocą interfejsu wiersza poleceń gcloud

Co dalej?

Zapoznaj się z innymi ćwiczeniami z programowania dotyczącymi Cymbal Eats:

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.