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

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

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: lut 2, 2023
account_circleAutorzy: Andrey Shakirov, Christopher Grant

1. Omówienie

W tym module utworzysz aktywator Eventarc, który łączy temat Pub/Sub z usługą Workflows. Eventarc pozwala oddzielić komunikację między usługami, dzięki czemu rozwiązanie jest bardziej elastyczne i zależne od zdarzeń. Utworzysz przepływ pracy obejmujący wiele etapów procesu biznesowego obliczania punktów w programie lojalnościowym klienta za składanie zamówień w Cymbal Eats. Przepływ pracy wyśle wiele żądań do aplikacji działającej w Autopilocie w GKE i opublikuje wiadomość w temacie Pub/Sub, aby powiadomić aplikację usługi zamówień o obliczonych punktach premiowych.

6c0606022b76f79d.png

Czym jest Autopilot w GKE?

Autopilot w GKE to tryb działania w GKE, 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 plików manifestu Kubernetes. Uproszczona konfiguracja jest zgodna ze sprawdzonymi metodami i zaleceniami GKE dotyczącymi konfigurowania, skalowalności i zabezpieczeń klastra oraz zadań. Listę wbudowanych ustawień znajdziesz w tabeli Autopilot i standardowe porównanie.

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

Obowiązki klienta i Google w przypadku pracy w trybie GKE Standard

85500aad65f87437.png

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

Co to jest Eventarc?

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

Dostawcy zdarzeń Google

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

Dostawcy zewnętrzni

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

Aktywatory Eventarc

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

Miejsca docelowe wydarzeń

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

c7ca054200edf1b3.png

Co to jest Workflows?

Przepływy pracy to w pełni zarządzana usługa, która umożliwia integrację mikroserwisów, zadań i interfejsów API. Workflows to bezserwerowa usługa, która jest skalowana odpowiednio do zapotrzebowania.

Przypadki użycia przepływów pracy:

  • Przepływy pracy oparte na zdarzeniach są wykonywane w zdefiniowanych aktywatorach. Stanie się tak na przykład wtedy, gdy po przesłaniu nowego zamówienia chcesz obliczyć punkty lojalnościowe klienta. Po anulowaniu zamówienia wydarzenie można opublikować, 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 nocne polegające na wyszukaniu i usunięciu pozycji menu, które mają stan „Niepowodzenie”.

Przepływy pracy idealnie sprawdzają się w przypadku przepływów pracy administrujących usługami. Możesz zautomatyzować procesy, które obejmują odczekanie i ponawianie próby nawet przez rok.

Zalety przepływu pracy:

  • Konfigurowanie zamiast pisania kodu: zmniejsz niepotrzebny dług technologiczny, przenosząc logikę do konfiguracji zamiast pisać kod.
  • Uprość architekturę. Stanowe przepływy pracy umożliwiają wizualizację i monitorowanie złożonych integracji usług bez dodatkowych zależności.
  • Postaw na niezawodność i odporność na awarie. Kontroluj błędy za pomocą domyślnej lub niestandardowej logiki ponownych prób i obsługi błędów nawet w przypadku awarii innych systemów. Sprawdzasz każdy krok w Cloud Spanner, aby ułatwić śledzenie postępów.
  • Nie wymaga obsługi. Skalowanie w miarę potrzeb: nie ma niczego do poprawienia ani do utrzymywania. Płać tylko za uruchomione przepływy pracy – bez opłat i braku aktywności.

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

Czego się nauczysz

Z tego modułu nauczysz się:

  • Skonfiguruj temat Pub/Sub i Eventarc, aby aktywować przepływy pracy
  • Skonfiguruj przepływ pracy, aby wykonywać wywołania interfejsu API aplikacji działających w Autopilocie w GKE
  • Konfigurowanie przepływu pracy do publikowania wiadomości w Pub/Sub
  • Jak tworzyć zapytania dotyczące uporządkowanych logów Workflows w Cloud Logging i za pomocą gcloud CLI

Wymagania wstępne

  • W tym module zakładamy, że znasz środowiska konsoli Cloud i Cloud Shell.
  • Wcześniejsze środowiska GKE i Cloud Pub/Sub są przydatne, ale nie wymagane.

2. Konfiguracja i wymagania

Konfigurowanie projektu Cloud

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Konfiguracja środowiska

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

8613854df02635a3.png

Sklonuj repozytorium, przejdź do katalogu, skopiuj poniższe polecenie, wklej je w terminalu i naciśnij Enter:

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

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

Zostaną utworzone te zasoby:

  • Klaster i instancja AlloyDB
  • Klaster z Autopilotem w GKE
./gke-lab-setup.sh

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

6356559df3eccdda.png

Konfiguracja potrwa około 10 minut.

Zanim wykonasz kolejne czynności, poczekaj, aż skrypt zakończy działanie i zobaczysz dane wyjściowe poniżej.

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 z Autopilotem w GKE

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

Klaster został utworzony w ramach wstępnej konfiguracji przy użyciu poniższego polecenia (nie musisz go uruchamiać):

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

Uruchom polecenie, aby wyświetlić utworzony klaster GKE z Autopilotem:

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. To oparty na Javie mikroserwis, który korzysta ze platformy Quarkus.

Przejdź do folderu cymbal-eats/customer-service i uruchom te 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 kluczy 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 polecenie, aby zastąpić CUSTOMER_SERVICE_IMAGE w plikudeploy.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

Zanim aplikacja przejdzie w stan uruchomienia, może chwilę potrwać.

Przejrzyj 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 polecenie, aby zweryfikować utworzone zasoby:

kubectl get all

Przykładowe dane wyjściowe:

179a23bd33793924.png

4. Sprawdź przepływ pracy

Podstawowe pojęcia dotyczące przepływów pracy

Przepływ pracy składa się z serii kroków opisanych przy użyciu składni Workflows( YAML lub JSON).

Po utworzeniu przepływu pracy jest on wdrażany, dzięki czemu jest on gotowy do wykonania.

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

Ustawienia wykonywania

  • Kroki – aby utworzyć przepływ pracy, określ żądane steps oraz kolejność wykonywania za pomocą składni Workflows. Każdy przepływ pracy musi zawierać co najmniej 1 krok.
  • Warunki – możesz użyć bloku switch jako mechanizmu wyboru, który umożliwia wartości wyrażenia kontrolowanie przepływu wykonania przepływu pracy.
  • Iteracje – możesz użyć pętli for do iteracji w sekwencji liczb lub przez zbieranie danych, takich jak lista lub mapa.
  • Podrzędne przepływy pracy – podrzędny przepływ pracy działa podobnie do rutyny lub funkcji w języku programowania, umożliwiając uwzględnienie kroku lub zestawu kroków, który będzie powtórzony wiele razy.

Aktywowanie uruchomień

  • Ręcznie – możesz zarządzać przepływami pracy w konsoli Google Cloud lub z poziomu wiersza poleceń za pomocą Google Cloud CLI.
  • Automatyzacja – do zarządzania przepływami pracy można używać bibliotek klienta Cloud dla interfejsu Workflows API (lub interfejsu API REST).
  • Zaplanowany – możesz używać usługi Cloud Scheduler do uruchamiania przepływu pracy według określonego harmonogramu.

Argumenty środowiska wykonawczego

Dostęp do danych przekazywanych w czasie działania można uzyskać, dodając pole params do głównego przepływu pracy (umieszczonego w głównym bloku). Blok główny akceptuje pojedynczy argument w dowolnym prawidłowym typie danych JSON. Pole Parametry zawiera nazwę zmiennej, której w przepływie pracy używa do przechowywania przekazywanych przez Ciebie danych.

Logika przepływu pracy

Jeśli taki klient nie istnieje, najpierw nastąpi wywołanie interfejsu API, aby utworzyć klienta, a następnie zaktualizować punkty w programie lojalnościowym. Na podstawie łącznej kwoty zamówienia przepływ pracy wybierze mnożnik do obliczenia punktów w programie lojalnościowym dla klienta. Szczegóły znajdziesz 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 poprzednich danych wyjściowych.

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

Zastąp adres URL aplikacji obsługi klienta w szablonie przepływu pracy:

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

Ustaw lokalizację zmiennych środowiskowych usługi Workflows i 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:

  • Interfejsy API rejestrowania połączeń
  • 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"

Przepływ pracy wdrażania. Przepływ pracy jest skonfigurowany tak, aby korzystać z 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 Reguły). W tej chwili nie ma żadnych aktywatorów skonfigurowanych do wykonywania tego przepływu pracy. Skonfigurujesz ją w następnym kroku.

66ba7ebbde76d5a6.png

6. Skonfiguruj tematy Pub/Sub i aktywator Eventarc

Utworzysz 2 tematy Pub/Sub i skonfigurujesz 1 aktywator Eventarc.

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

Przepływ pracy będzie publikować w usłudze order-points-topic wiadomości z informacjami o punktach w programie lojalnościowym za zamówienie i łącznej kwocie. Usługa zamówienia(niewdrożona część tego modułu) udostępnia punkt końcowy używany przez subskrypcję Push w order-points-topic, do aktualizowania punktów nagród 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 dostęp do konta usługi w celu 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, aby 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ę dla reguły.

3fccdda7d5526597.png

Sprawdź zmiany po stronie przepływu pracy. Dodano nową regułę.

23d338abc16eaac8.png

7. Testowanie przepływu pracy

6c0606022b76f79d.png

Aby przeprowadzić symulację usługi zamówienia, wyślesz z Cloud Shell wiadomości do tematu Pub/Sub i zweryfikujesz 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'

Przejrzyj szczegóły wykonania przepływu pracy i dzienniki.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Uporządkowane logowanie przepływu pracy

Przepływ pracy jest skonfigurowany do zapisywania uporządkowanych logów w formacie JSON. Dzienniki są zapisywane przy użyciu interfejsu Cloud Logging API i zasobu workflows.googleapis.com/Workflow oraz pod nazwą logu projects/${PROJECT_ID}/logs/Workflows.

Sprawdź konfigurację logowania poniżej.

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

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

Aby wyświetlić pole zapytania, 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 interfejsu wiersza poleceń gcloud, aby odczytać logi 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

Uruchom poniższe polecenie, aby zwrócić logi w formacie 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

Przykładowe dane wyjściowe w formacie json:

ac7421548ea9a9f2.png

9. Sprawdź dane klientów

(Kroki opcjonalne)

Uruchom poniższe polecenia, 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 wielokrotnie opublikować nowe zamówienie i zweryfikować punkty w programie lojalnościowym klienta za pomocą polecenia curl.

Opublikuj nową wiadomość dotyczącą zamówienia:

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

Zweryfikuj punkty w programie lojalnościowym klienta:

curl $CUSTOMER_SERVICE_URL/customer | jq

Aby sprawdzić najnowsze logi, uruchom polecenie poniżej:

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. Udało Ci się ukończyć ćwiczenia z programowania.

Omówione zagadnienia:

  • Jak skonfigurować temat Pub/Sub i Eventarc, aby aktywować Workflows
  • Jak skonfigurować przepływ pracy, aby wywoływać interfejs API aplikacji działającej w Autopilocie w GKE
  • Jak skonfigurować przepływ pracy do publikowania wiadomości w Pub/Sub
  • Jak tworzyć zapytania dotyczące uporządkowanych logów Workflows w Cloud Logging i za pomocą gcloud CLI

Co dalej:

Poznaj inne ćwiczenia z programowania 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.

Usuwam projekt

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.