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

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

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Feb. 2, 2023
account_circleVerfasst von Andrey Shakirov, Christopher Grant

1. Übersicht

In diesem Lab erstellen Sie einen Eventarc-Trigger, der ein Pub/Sub-Thema mit dem Workflow-Dienst verbindet. Mit Eventarc können Sie die Dienst-zu-Dienst-Kommunikation entkoppeln, sodass Ihre Lösung erweiterbar und ereignisgesteuert ist. Sie erstellen einen Workflow, der mehrere Schritte umfasst, um einen Geschäftsprozess auszuführen und Kundenprämienpunkte für eine Bestellung bei Cymbal Eats zu berechnen. 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 berechnete 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 der 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 von GKE für die Einrichtung, Skalierbarkeit und Sicherheit von Clustern und Arbeitslasten. Eine Liste der integrierten Einstellungen finden Sie in der Tabelle Vergleich von Autopilot und Standard.

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

Verantwortlichkeiten des Kunden und Google bei Ausführung im GKE-Standardmodus

85500aad65f87437.png

Bei GKE Autopilot liegt die Konfiguration und Verwaltung von Knotenpools in der Verantwortung von Google. So können Sie sich auf Anwendungen und Dienste konzentrieren, die zusätzlich zum 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 zum Verwalten des Flusses von Statusänderungen, sogenannten Ereignissen, zwischen entkoppelten Mikrodiensten. Bei Auslösung leitet Eventarc diese Ereignisse über Pub/Sub-Abos an verschiedene Ziele weiter (z. B. Workflows, Cloud Run), während Sie die Bereitstellung, Sicherheit, Autorisierung, Beobachtbarkeit und Fehlerbehandlung für Sie verwalten.

Eventanbieter von Google

  • 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 mithilfe von Pub/Sub-Nachrichten an Eventarc.

Drittanbieter

Drittanbieter sind Rechtssubjekte, die nicht zu Google gehören und eine Eventarc-Quelle anbieten.

Eventarc-Trigger

  • Cloud Pub/Sub-Ereignisse: Eventarc kann durch Nachrichten ausgelöst werden, die in Pub/Sub-Themen veröffentlicht werden.
  • Ereignisse in Cloud-Audit-Logs (CAL): Cloud-Audit-Logs bieten Audit-Logs zur Administratoraktivität und 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. die Aktualisierung eines Cloud Storage-Buckets oder einer Firebase Remote Config-Vorlage.

Ziele von Veranstaltungen

  • Workflows
  • Cloud Run
  • GKE
  • Cloud Functions( 2nd gen)

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 und lässt sich nach Bedarf skalieren.

Anwendungsfälle für Workflows:

  • Ereignisgesteuerte Workflows werden für definierte Trigger ausgeführt. Das ist beispielsweise der Fall, wenn eine neue Bestellung aufgegeben wird und Sie Treuepunkte für Ihre Kundschaft berechnen möchten. Wenn eine Bestellung storniert wird, kann die Veranstaltung veröffentlicht werden und alle interessierten Dienste verarbeiten das Ereignis.
  • Mit Workflows für Batchjobs werden Jobs regelmäßig mit Cloud Scheduler ausgeführt. Beispiel: Ein nächtlicher Job, bei dem Menüpunkte mit dem Status „Fehlgeschlagen“ geprüft und gelöscht werden sollen.

Workflows sind ideal für Workflows, die Dienste orchestrieren. Sie können Prozesse automatisieren, die Wartezeiten und Wiederholungsversuche von bis zu einem Jahr beinhalten.

Vorteile von Workflows:

  • Konfiguration statt Code:Reduzieren Sie technische Schulden, indem Sie die Logik in die Konfiguration verschieben, anstatt Code zu schreiben.
  • Vereinfachte Architektur: Mit zustandsorientierten Workflows können Sie komplexe Dienstintegrationen ohne zusätzliche Abhängigkeiten visualisieren und überwachen.
  • Verlässlichkeit und Fehlertoleranz einbeziehen Steuern Sie Fehler mit Standard- oder benutzerdefinierter Wiederholungslogik und Fehlerbehandlung selbst dann, wenn andere Systeme ausfallen. Prüfen Sie jeden Schritt auf Cloud Spanner, damit Sie den Fortschritt im Blick behalten können.
  • Keine Wartung erforderlich. Nach Bedarf skalieren: Es gibt keine Patches oder Wartungen. Sie zahlen nur, wenn Ihre Workflows ausgeführt werden. Während des Wartens oder der Inaktivität fallen keine Kosten an.

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 Anwendungen konfigurieren, die in GKE Autopilot ausgeführt werden
  • Workflow zum Veröffentlichen von Nachrichten in Pub/Sub konfigurieren
  • Anleitung zum Abfragen von strukturierten Workflows-Logs in Cloud Logging und über die gcloud CLI

Vorbereitung

  • In diesem Lab wird davon ausgegangen, dass Sie mit der Cloud Console und Cloud Shell-Umgebungen vertraut sind.
  • Vorkenntnisse in GKE und Cloud Pub/Sub sind hilfreich, aber nicht 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 Projekt. 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 Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als PROJECT_ID gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.

Umgebung einrichten

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

8613854df02635a3.png

Klonen Sie das Repository und gehen Sie zum Verzeichnis. Kopieren Sie dann den folgenden Befehl, fügen Sie ihn in das Terminal ein und drücken Sie 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 den gke-lab-setup.sh ausführen

Folgende 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 abgeschlossen ist und die Ausgabe unten angezeigt wird, bevor Sie weitere 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 prüfen

Legen Sie die Projektumgebungsvariablen fest:

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 zum Speichern der Anmeldedaten für den Cluster aus:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Anwendung bereitstellen

Als Nächstes stellen Sie eine Anwendung für den Kundendienst bereit. Dies ist ein Java-basierter Mikrodienst, der das Quarkus-Framework verwendet.

Rufen Sie den Ordner cymbal-eats/customer-service auf 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 .

Legen Sie die private IP-Adresse von AlloyDB fest:

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-Secrets-Objekt zum Speichern von Datenbankanmeldedaten zu erstellen, die von der Kundendienstanwendung für die 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 einen Moment, bis die Anwendung in den Status RUNNING wechselt.

Sehen Sie sich die Datei mit der Bereitstellungsspezifikation an:

deployment.yaml.tmpl

Hier ist der Teil der Konfiguration, in dem die Ressourcen angegeben werden, 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 eine 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 Überprüfung

Kernkonzepte für Workflows

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

Nachdem ein Workflow erstellt wurde, wird er bereitgestellt. Der Workflow kann nun ausgeführt werden.

Eine Ausführung ist eine einzelne Ausführung der Logik, die in der Definition eines Workflows enthalten ist. Für einen Workflow, der nicht ausgeführt wurde, fallen keine Kosten 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ünschte steps und die Ausführungsreihenfolge mithilfe der Workflows-Syntax. Jeder Workflow muss mindestens einen Schritt enthalten.
  • Bedingungen: Sie können einen switch-Block als Auswahlmechanismus verwenden, der es dem Wert eines Ausdrucks ermöglicht, den Ablauf bei der Ausführung eines Workflows zu steuern.
  • Iterationen: Sie können eine for-Schleife verwenden, um über eine Zahlenfolge oder durch eine Sammlung von Daten, z. B. eine Liste oder Map, zu iterieren.
  • Untergeordnete Workflows: Ein untergeordneter Workflow funktioniert ähnlich wie eine Routine oder eine Funktion in einer Programmiersprache. Sie können also einen Schritt oder eine Reihe von Schritten kapseln, die der Workflow mehrmals wiederholt.

Ausführungen auslösen

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

Laufzeitargumente

Sie können auf Daten zugreifen, die zur Laufzeit übergeben werden, indem Sie Ihrem Hauptworkflow (in einem Hauptblock) das Feld params hinzufügen. Der Hauptblock akzeptiert ein einzelnes Argument mit einem beliebigen gültigen JSON-Datentyp. Das Feld "params" gibt die Variable an, in der der Workflow die von Ihnen übergebenen Daten speichert.

Workflowlogik

Wenn kein Kunde vorhanden ist, wird im Workflow ein API-Aufruf ausgeführt, um zuerst einen Kunden zu erstellen und dann die Prämienpunkte zu aktualisieren. Basierend auf dem Gesamtbetrag der Bestellung wählt der Workflow einen Multiplikator aus, um Prämienpunkte für den Kunden zu berechnen. 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 anzusehen:

kubectl get svc

Beispielausgabe:

fe5cfec2bc836a5f.png

Legen Sie die Umgebungsvariable unten mit dem Wert der externen IP-Adresse aus der vorherigen Ausgabe fest.

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

Ersetzen Sie die Anwendungs-URL des Kundenservice 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 -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:

  • Anrufprotokollierungs-APIs
  • Nachrichten in 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"

Bereitstellungsworkflow. 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 Quelle des Workflows und andere Details an(Tab „Trigger“). Derzeit sind keine Trigger zum Ausführen dieses Workflows konfiguriert. Die Einrichtung erfolgt im nächsten Schritt.

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 mit Informationen zu neuen Bestellungen an order-topic.

Der Workflow veröffentlicht Nachrichten mit Informationen zu Prämienpunkten und Gesamtbetrag für Bestellungen in order-points-topic. Order Service(nicht in diesem Lab bereitgestellt) enthält einen Endpunkt, der vom Push-Abo für order-points-topic, verwendet wird, um die Prämienpunkte und den Gesamtbetrag pro Bestellung zu aktualisieren.

Erstellen Sie neue Pub/Sub-Themen:

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, um Workflows auszuführen.

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.

Prüfen Sie den erstellten Eventarc-Trigger.

bda445561ad5f4.png

Prüfen Sie das erstellte Abo für den Trigger.

3fccdda7d5526597.png

Überprüfen Sie die Änderungen auf der Workflowseite. Ein neuer Trigger wurde hinzugefügt.

23d338abc16eaac8.png

7. Workflow testen

6c0606022b76f79d.png

Um Order Service zu simulieren, senden Sie Nachrichten aus Cloud Shell an das Pub/Sub-Thema und prüfen die Kundenservice-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 Details und Logs zur Workflowausführung an.

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. Strukturiertes Logging für Workflows

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

Überprüfen Sie die Logging-Konfiguration unten.

    - 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 „Suchanfrage 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. Verwenden Sie dazu die folgenden Befehle.

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 prüfen

(Optionale Schritte)

Führen Sie die folgenden Befehle aus, um die Umgebungsvariable für die URL für den Kundenservice 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 aus, um eine neue Bestellung mehrmals zu veröffentlichen und Kundenprämienpunkte mit dem Befehl „curl“ zu prüfen.

Neue Auftragsnachricht 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ämienpunkte für Kunden überprüfen:

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!

Glückwunsch, du hast das Codelab abgeschlossen.

Behandelte Themen:

  • Pub/Sub-Thema und Eventarc zum Auslösen von Workflows konfigurieren
  • Workflow für API-Aufrufe an Anwendungen konfigurieren, die in GKE Autopilot ausgeführt werden
  • Workflow zum Veröffentlichen von Nachrichten in Pub/Sub konfigurieren
  • Anleitung zum Abfragen von strukturierten Workflows-Logs in Cloud Logging und über die gcloud CLI

Nächste Schritte:

Weitere Codelabs von 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.