Eventarc zum Auslösen von Workflows konfigurieren, die in GKE Autopilot und Pub/Sub eingebunden sind

1. Übersicht

In diesem Lab erstellen Sie einen Eventarc-Trigger, der ein Pub/Sub-Thema mit dem Workflows-Dienst verbindet. Mit Eventarc können Sie die Kommunikation zwischen Diensten entkoppeln, wodurch Ihre Lösung erweiterbarer und ereignisgesteuerter wird. Sie erstellen einen Workflow mit mehreren Schritten, um einen Geschäftsprozess auszuführen, mit dem Kundenbonuspunkte für Bestellungen bei Cymbal Eats berechnet werden. Der Workflow sendet mehrere Anfragen an eine Anwendung, die in GKE Autopilot ausgeführt wird, und veröffentlicht eine Nachricht im Pub/Sub-Thema, um die Order Service-Anwendung über die berechneten Prämienpunkte zu informieren.

6c0606022b76f79d.png

Was ist GKE Autopilot?

GKE Autopilot ist ein Betriebsmodus in GKE, in dem Google Ihre Clusterkonfiguration verwaltet, einschließlich Knoten, Skalierung, Sicherheit und anderer vorkonfigurierter Einstellungen. Autopilot-Cluster sind für die Ausführung der meisten Produktionsarbeitslasten optimiert und stellen Rechenressourcen basierend auf Ihren Kubernetes-Manifesten bereit. Die optimierte Konfiguration folgt den Best Practices und Empfehlungen der GKE für die Einrichtung von Clustern und Arbeitslasten, Skalierbarkeit und Sicherheit. Eine Liste der integrierten Einstellungen finden Sie in der Vergleichstabelle für Autopilot und Standard.

Bei GKE Standard sind Nutzer für die Verwaltung von Worker-Knoten und die Konfiguration von Knotenpools verantwortlich, während der Rest von GKE übernommen wird.

Verantwortlichkeiten des Kunden und von Google bei der Ausführung im GKE Standard-Modus

85500aad65f87437.png

Mit GKE Autopilot ist Google für die Konfiguration und Verwaltung von Knotenpools verantwortlich. So können Sie sich auf Anwendungen und Dienste konzentrieren, die auf dem Cluster ausgeführt werden.

Was ist Eventarc?

Mit Eventarc können Sie ereignisgesteuerte Architekturen erstellen, ohne die zugrunde liegende Infrastruktur implementieren, anpassen oder verwalten zu müssen. Eventarc bietet eine standardisierte Lösung, um den Ablauf von Statusänderungen, die als Ereignisse bezeichnet werden, zwischen entkoppelten Mikrodiensten zu verwalten. Bei Auslösung leitet Eventarc diese Ereignisse über Pub/Sub-Abos an verschiedene Ziele weiter (z. B. Workflows, Cloud Run) und verwaltet dabei die Bereitstellung, Sicherheit, Autorisierung, Beobachtbarkeit und Fehlerbehandlung für Sie.

Google-Eventanbieter

  • Mehr als 90 Google Cloud-Anbieter. Diese Anbieter senden Ereignisse entweder direkt aus der Quelle (z. B. Cloud Storage) oder über Cloud-Audit-Logeinträge.
  • Pub/Sub-Anbieter Diese Anbieter senden Ereignisse über Pub/Sub-Nachrichten an Eventarc.

Drittanbieter

Drittanbieter sind Entitäten, die nicht von Google stammen und eine Eventarc-Quelle bieten.

Eventarc-Trigger

  • Cloud Pub/Sub-Ereignisse: Eventarc kann durch Nachrichten ausgelöst werden, die in Pub/Sub-Themen veröffentlicht wurden.
  • CAL-Ereignisse (Cloud-Audit-Logs) Cloud-Audit-Logs bieten Audit-Logs für Admin-Aktivitäten und Audit-Logs zum Datenzugriff für jedes Cloud-Projekt, jeden Ordner und jede Organisation.
  • Direkte Ereignisse: Eventarc kann durch verschiedene direkte Ereignisse ausgelöst werden, z. B. eine Aktualisierung in einem Cloud Storage-Bucket oder eine Aktualisierung auf eine Firebase Remote Config-Vorlage.

Zielvorhaben vom Typ „Ereignis“

c7ca054200edf1b3.png

Was sind Workflows?

Workflows ist ein vollständig verwalteter Dienst, mit dem Sie Mikrodienste, Aufgaben und APIs einbinden können. Workflows ist ein serverloser Dienst, der entsprechend Ihrem Bedarf skaliert wird.

Anwendungsfälle für Workflows:

  • Ereignisgesteuerte Workflows werden bei bestimmten Triggern ausgeführt. Zum Beispiel, wenn eine neue Bestellung aufgegeben wird und Sie Kundenbindungspunkte berechnen möchten. Wenn eine Bestellung storniert wird, kann das Ereignis veröffentlicht werden und alle interessierten Dienste verarbeiten das Ereignis.
  • Batchjob-Workflows führen Jobs regelmäßig mit Cloud Scheduler aus. Ein Beispiel ist ein nächtlicher Job, der nach Menüelementen mit dem Status „Fehler“ sucht und sie löscht.

Workflows ist ideal für Workflows, die Dienste orchestrieren. Sie können Prozesse automatisieren, die Wartezeiten und Wiederholungsversuche umfassen, die bis zu ein Jahr lang dauern.

Vorteile von Workflows:

  • Konfiguration statt Code:Sie können die technische Schuld reduzieren, indem Sie die Logik in die Konfiguration verschieben, anstatt Code zu schreiben.
  • Architektur vereinfachen: Mit zustandsorientierten Workflows können Sie komplexe Dienstintegrationen ohne zusätzliche Abhängigkeiten definieren, visualisieren und überwachen.
  • Zuverlässigkeit und Fehlertoleranz einbinden: Steuern Sie Fehler mit der Standard- oder benutzerdefinierten Wiederholungslogik und Fehlerbehandlung, auch wenn andere Systeme ausfallen. Dazu nutzen Sie die Prüfpunktausführung für jeden Schritt auf Cloud Spanner, damit Sie den Fortschritt verfolgen können.
  • Keinerlei Wartung erforderlich. Skalieren nach Bedarf: Es gibt weder Patches noch Wartungsarbeiten. Sie bezahlen nur, wenn Ihre Workflows ausgeführt werden. Dabei entstehen keine Kosten, während Sie warten oder inaktiv sind.

In diesem Lab konfigurieren Sie einen ereignisgesteuerten Workflow.

Lerninhalte

In diesem Lab lernen Sie Folgendes:

  • Pub/Sub-Thema und Eventarc zum Auslösen von Workflows konfigurieren
  • Workflow für API-Aufrufe an eine Anwendung konfigurieren, die in GKE Autopilot ausgeführt wird
  • Workflow zum Veröffentlichen von Nachrichten in Pub/Sub konfigurieren
  • Strukturierte Logs von Workflows in Cloud Logging und mit der gcloud CLI abfragen

Vorbereitung

  • Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Cloud Shell-Umgebungen vertraut sind.
  • Vorkenntnisse in GKE und Cloud Pub/Sub sind hilfreich, aber nicht zwingend erforderlich.

2. Einrichtung und Anforderungen

Cloud-Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Umgebung einrichten

Aktivieren Sie Cloud Shell, indem Sie rechts neben der Suchleiste auf das Symbol klicken.

8613854df02635a3.png

Klonen Sie das Repository und rufen Sie das Verzeichnis auf. Kopieren Sie den folgenden Befehl und fügen Sie ihn in das Terminal ein. Drücken Sie dann die Eingabetaste:

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

Stellen Sie die erforderlichen Abhängigkeiten bereit, indem Sie gke-lab-setup.sh ausführen.

Die folgenden Ressourcen werden erstellt:

  • AlloyDB-Cluster und ‑Instanz
  • GKE Autopilot-Cluster
./gke-lab-setup.sh

Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf „Autorisieren“, um fortzufahren.

6356559df3eccdda.png

Die Einrichtung dauert etwa 10 Minuten.

Warten Sie, bis das Skript fertig ist und die unten stehende Ausgabe angezeigt wird, bevor Sie andere Schritte ausführen.

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. GKE Autopilot-Cluster

GKE Autopilot-Cluster ansehen

Projektumgebungsvariablen festlegen:

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

Im Rahmen der Ersteinrichtung wurde der Cluster mit dem folgenden Befehl erstellt (Sie müssen diesen Befehl nicht ausführen):

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

Führen Sie den Befehl aus, um den erstellten GKE Autopilot-Cluster aufzurufen:

gcloud container clusters list

Beispielausgabe:

772db9dd58172e0c.png

Führen Sie den Befehl aus, um Anmeldedaten für den Cluster zu speichern:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Anwendung bereitstellen

Als Nächstes stellen Sie eine Kundenserviceanwendung bereit. Dies ist ein Java-basierter Mikrodienst, der das Quarkus-Framework verwendet.

Wechseln Sie zum Ordner cymbal-eats/customer-service und führen Sie die folgenden Befehle aus, um das Container-Image zu erstellen und hochzuladen:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Private IP-Adresse für AlloyDB festlegen:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Führen Sie die folgenden Befehle aus, um ein Kubernetes-Secret-Objekt zum Speichern von Datenbankanmeldedaten zu erstellen, die von der Kundenserviceanwendung zum Herstellen einer Verbindung zur Datenbank verwendet werden:

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

Führen Sie den Befehl aus, um CUSTOMER_SERVICE_IMAGE in der Datei „deployment.yaml“ zu ersetzen:

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

Führen Sie den Befehl aus, um die Anwendung bereitzustellen:

kubectl apply -f customer-service-deployment.yaml

Es dauert einige Zeit, bis die Anwendung den Status „Wird ausgeführt“ erreicht.

Bereitstellungsspezifikationsdatei prüfen:

deployment.yaml.tmpl

Hier sehen Sie den Teil der Konfiguration, in dem die Ressourcen angegeben sind, die zum Ausführen dieser Anwendung erforderlich sind.

    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

Führen Sie den Befehl aus, um die externe IP-Adresse zu erstellen, die im Workflow verwendet wird:

SERVICE_NAME=customer-service

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

Führen Sie den Befehl aus, um die erstellten Ressourcen zu prüfen:

kubectl get all

Beispielausgabe:

179a23bd33793924.png

4. Workflow für die Überprüfung

Workflows – Wichtige Konzepte

Ein Workflow besteht aus einer Reihe von Schritten, die mit der Workflows-Syntax( YAML oder JSON) beschrieben werden.

Nachdem ein Workflow erstellt wurde, wird er bereitgestellt. Dadurch ist der Workflow für die Ausführung bereit.

Eine Ausführung ist ein einzelner Durchlauf der Logik, die in der Definition eines Workflows enthalten ist. Für einen Workflow, der nicht ausgeführt wurde, fallen keine Gebühren an. Alle Workflowausführungen sind unabhängig und die schnelle Skalierung des Produkts ermöglicht eine hohe Anzahl gleichzeitiger Ausführungen.

Ausführungskontrollen

  • Schritte: Um einen Workflow zu erstellen, definieren Sie die gewünschten steps und die Ausführungsreihenfolge mit der Workflows-Syntax. Jeder Workflow muss mindestens einen Schritt enthalten.
  • Bedingungen: Sie können einen switch-Block als Auswahlmechanismus verwenden, mit dem der Wert eines Ausdrucks den Ablauf der Workflowausführung steuern kann.
  • Wiederholungen: Mit einer for-Schleife können Sie eine Sequenz von Zahlen oder eine Sammlung von Daten wie eine Liste oder Karte durchlaufen.
  • Untergeordnete Workflows: Ein untergeordneter Workflow funktioniert ähnlich wie ein Ablauf oder eine Funktion in einer Programmiersprache, sodass Sie einen Schritt oder eine Reihe von Schritten kapseln können, die der Workflow mehrmals wiederholt.

Ausführungen auslösen

  • Manuell: Sie können Workflows über die Google Cloud Console oder über die Befehlszeile mit der Google Cloud CLI verwalten.
  • Programmatisch: Mit den Cloud-Clientbibliotheken für die Workflows API oder der REST API können Sie Workflows verwalten.
  • Geplant: Mit Cloud Scheduler können Sie einen Workflow nach einem bestimmten Zeitplan ausführen.

Laufzeitargumente

Auf Daten, die zur Laufzeit übergeben werden, kann zugegriffen werden, indem Sie Ihrem Hauptworkflow (in einem Hauptblock) das Feld params hinzufügen. Der Hauptblock akzeptiert ein einzelnes Argument, das ein beliebiger gültiger JSON-Datentyp sein kann. Im Feld „params“ wird die Variable angegeben, in der die übergebenen Daten gespeichert werden.

Workflow-Logik

Wenn ein Kunde nicht vorhanden ist, wird im Workflow zuerst ein API-Aufruf ausgeführt, um einen Kunden zu erstellen, und dann werden die Prämienpunkte aktualisiert. Anhand des Gesamtbetrags der Bestellung wird im Workflow ein Multiplikator ausgewählt, mit dem die Prämienpunkte für den Kunden berechnet werden. Weitere Informationen finden Sie im Beispiel unten.

    - 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. Workflow konfigurieren und bereitstellen

Führen Sie den folgenden Befehl aus, um die externe IP-Adresse für den Dienst aufzurufen:

kubectl get svc

Beispielausgabe:

fe5cfec2bc836a5f.png

Legen Sie die Umgebungsvariable unten mit dem Wert von „External IP“ aus der vorherigen Ausgabe fest.

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

Ersetzen Sie die URL der Kundenserviceanwendung in der Workflowvorlage:

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

Legen Sie den Speicherort für die Umgebungsvariablen des Workflows-Dienstes und des Projekts fest:

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

Erstellen Sie ein benutzerdefiniertes Dienstkonto für den Workflow mit den folgenden Berechtigungen:

  • Call Logging APIs
  • Nachrichten in einem Pub/Sub-Thema veröffentlichen
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"

Workflow bereitstellen. Der Workflow ist so konfiguriert, dass das im vorherigen Schritt erstellte Dienstkonto verwendet wird:

export WORKFLOW_NAME=rewardsWorkflow

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

Sehen Sie sich die Workflow-Quelle und andere Details an(Tab „Trigger“). Derzeit sind keine Trigger zum Ausführen dieses Workflows konfiguriert. Sie richten sie im nächsten Schritt ein.

66ba7ebbde76d5a6.png

6. Pub/Sub-Themen und Eventarc-Trigger konfigurieren

Als Nächstes erstellen Sie zwei Pub/Sub-Themen und konfigurieren einen Eventarc-Trigger.

Die Order Service-Anwendung veröffentlicht Nachrichten in order-topic mit Informationen zu neuen Bestellungen.

Der Workflow veröffentlicht Nachrichten in order-points-topic mit Informationen zu den Prämienpunkten für die Bestellung und dem Gesamtbetrag. Der Order Service(nicht bereitgestellter Teil dieses Labs) stellt einen Endpunkt bereit, der vom Push-Abo für order-points-topic, verwendet wird, um Prämienpunkte und den Gesamtbetrag pro Bestellung zu aktualisieren.

Neue Pub/Sub-Themen erstellen:

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

Legen Sie den Standort für den Eventarc-Dienst fest:

gcloud config set eventarc/location ${REGION}

Erstellen Sie ein benutzerdefiniertes Dienstkonto, das vom Eventarc-Trigger zum Ausführen von Workflows verwendet wird.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

Gewähren Sie dem Dienstkonto Zugriff zum Ausführen von Workflows.

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

Erstellen Sie einen Eventarc-Trigger, um Pub/Sub-Nachrichten zu überwachen und an Workflows zu senden.

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

Beispielausgabe:

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.

Erstellten Eventarc-Trigger prüfen.

bda445561ad5f4.png

Sehen Sie sich das erstellte Abo für den Trigger an.

3fccdda7d5526597.png

Prüfen Sie die Änderungen auf der Workflow-Seite. Ein neuer Trigger wurde hinzugefügt.

23d338abc16eaac8.png

7. Workflow testen

6c0606022b76f79d.png

Um den Order Service zu simulieren, senden Sie Nachrichten aus der Cloud Shell an das Pub/Sub-Thema und prüfen Sie die Customer Service-Logs in der Cloud Console.

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

Beispielausgabe:

messageIds:
- '5063709859203105'

Sehen Sie sich die Details zur Workflowausführung und die Logs an.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Strukturiertes Workflow-Logging

Der Workflow ist so konfiguriert, dass strukturierte Logs im JSON-Format geschrieben werden. Die Logs werden mit der Cloud Logging API, der Ressource workflows.googleapis.com/Workflow und unter dem Lognamen projects/${PROJECT_ID}/logs/Workflows geschrieben.

Sehen Sie sich die Logging-Konfiguration unten an.

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

Öffnen Sie den Log-Explorer in der Cloud Console und führen Sie eine Abfrage aus, um verarbeitete Bestellungen mit einem Gesamtbetrag von mehr als 2 $zu finden.

Klicken Sie auf „Abfrage anzeigen“, um das Feld für die Suchanfrage einzublenden.

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"

Beispielausgabe:

9093f87159f1b928.png

Öffnen Sie Cloud Shell und verwenden Sie die gcloud CLI, um Logs zu lesen.

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

Beispielausgabe im table-Format:

35d5fd851ecde60.png

Führen Sie den folgenden Befehl aus, um Logs im JSON-Format zurückzugeben:

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

Beispielausgabe im json-Format:

ac7421548ea9a9f2.png

9. Kundendatensätze überprüfen

(Optionale Schritte)

Führen Sie die folgenden Befehle aus, um die Umgebungsvariable für die Kundenservice-URL festzulegen.

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

curl $CUSTOMER_SERVICE_URL/customer | jq

Beispielausgabe:

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

Führen Sie den Befehl zum Veröffentlichen einer neuen Bestellung mehrmals aus und prüfen Sie die Kunden-Prämienpunkte mit dem curl-Befehl.

Nachricht über neue Bestellung veröffentlichen:

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

Prüfe die Prämienpunkte des Kunden:

curl $CUSTOMER_SERVICE_URL/customer | jq

Führen Sie den folgenden Befehl aus, um nach den neuesten Logs zu suchen:

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. Glückwunsch!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen:

  • Pub/Sub-Thema und Eventarc zum Auslösen von Workflows konfigurieren
  • Workflow so konfigurieren, dass API-Aufrufe an eine Anwendung erfolgen, die in GKE Autopilot ausgeführt wird
  • Workflow so konfigurieren, dass Nachrichten in Pub/Sub veröffentlicht werden
  • Strukturierte Logs von Workflows in Cloud Logging und mit der gcloud CLI abfragen

Nächste Schritte:

Weitere Codelabs zu Cymbal Eats:

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.