GKE Autopilot および Pub/Sub と統合する Workflows をトリガーするように Eventarc を構成する

GKE Autopilot および Pub/Sub と統合する Workflows をトリガーするように Eventarc を構成する

この Codelab について

subject最終更新: 2月 2, 2023
account_circle作成者: Andrey Shakirov, Christopher Grant

1. 概要

このラボでは、Pub/Sub トピックを Workflows サービスに接続する Eventarc トリガーを作成します。Eventarc を使用すると、サービス間通信を分離できるため、ソリューションの拡張性が高まり、イベント ドリブンになります。Cymbal Eats での注文に対するお客様の特典ポイントを計算するためのビジネス プロセスを実行する、複数のステップを含むワークフローを作成します。このワークフローは、GKE Autopilot で実行されているアプリケーションに複数のリクエストを送信し、Pub/Sub トピックにメッセージをパブリッシュして、計算された報酬ポイントについて注文サービス アプリケーションに通知します。

6c0606022b76f79d.png

GKE Autopilot とは

GKE Autopilot は GKE の運用モードの一つで、ノード、スケーリング、セキュリティ、その他の事前構成された設定などのクラスタ構成を Google が管理します。Autopilot クラスタは、ほとんどの本番環境ワークロードを実行するように最適化されており、Kubernetes マニフェストに基づいてコンピューティング リソースをプロビジョニングします。この合理化された構成は、クラスタとワークロードの設定、スケーラビリティ、セキュリティに関する GKE のベスト プラクティスと推奨事項に準拠しています。組み込みの設定のリストについては、Autopilot と Standard の比較の表をご覧ください。

GKE Standard では、ユーザーはワーカーノードとノードプールの構成を管理し、残りは GKE によって処理されます。

GKE Standard モードで実行する場合のお客様と Google の責任

85500aad65f87437.png

GKE Autopilot では、ノードプールの構成と管理は Google が行います。これにより、ユーザーはクラスタ上で実行されるアプリケーションとサービスに集中できます。

Eventarc とは

Eventarc を使用すると、基盤となるインフラストラクチャを実装、カスタマイズ、またはメンテナンスすることなく、イベント ドリブン アーキテクチャを構築できます。Eventarc は、分離されたマイクロサービス間の状態変更(イベント)を管理する標準化されたソリューションを提供します。トリガーされると、Eventarc は Pub/Sub サブスクリプションを介してさまざまな宛先(例:Workflows、Cloud Run など)での開発、セキュリティ、認可、オブザーバビリティ、エラー処理の管理もサポートします。

Google イベント プロバイダ

  • 90 を超える Google Cloud プロバイダ。これらのプロバイダは、ソース(Cloud Storage など)から直接イベントを送信するか、Cloud Audit Logs のエントリを介してイベントを送信します。
  • 使用できます。これらのプロバイダは、Pub/Sub メッセージを使用して Eventarc にイベントを送信します。

サードパーティ プロバイダ

サードパーティ プロバイダは、Eventarc ソースを提供する Google 以外のエンティティです。

Eventarc トリガー

  • Cloud Pub/Sub イベント。Eventarc は、Pub/Sub トピックに公開されたメッセージによってトリガーできます。
  • Cloud Audit Logs(CAL)イベント。Cloud Audit Logs は、Cloud のプロジェクト、フォルダ、組織ごとに管理アクティビティ監査ログとデータアクセス監査ログを提供します。
  • 直接イベント。Eventarc は、Cloud Storage バケットの更新や Firebase Remote Config テンプレートの更新など、さまざまな直接イベントによってトリガーできます。

イベントの宛先

c7ca054200edf1b3.png

Workflows とは

Workflows は、マイクロサービス、タスク、API を統合できるフルマネージド サービスです。Workflows はサーバーレス サービスで、需要に応じてスケーリングします。

Workflows のユースケース:

  • イベント ドリブン ワークフローは、定義されたトリガーで実行されます。たとえば、新しい注文が送信され、顧客のポイントを計算したい場合などです。また、注文がキャンセルされたときにイベントを公開し、関連するすべてのサービスがイベントを処理するようにすることもできます。
  • バッチジョブ ワークフローは、Cloud Scheduler を使用してジョブを定期的に実行します。たとえば、失敗ステータスのメニュー項目を確認し、項目を削除する夜間のジョブなどです。

Workflows は、サービスをオーケストレートするワークフローに最適です。最大 1 年間の待機や再試行などのプロセスを自動化できます。

Workflows のメリット:

  • コードよりも構成を優先: コードを記述するのではなく、ロジックを構成に移行することで、技術的負債を削減します。
  • アーキテクチャを簡素化する。ステートフル ワークフローを使用すると、追加の依存関係なしで複雑なサービス統合を可視化してモニタリングできます。
  • 信頼性とフォールト トレランスを組み込みます。デフォルトまたはカスタムの再試行ロジックで障害を制御し、他のシステムで障害が発生した場合でもエラーを処理できます。すべてのステップを Cloud Spanner にチェックポイントすることで、進行状況を追跡できます。
  • メンテナンス不要。必要に応じたスケーリング: パッチやメンテナンスは不要です。ワークフローが実行された場合にのみ料金が発生し、待機中やアクティブでない間も費用は発生しません。

このラボでは、イベント ドリブンのワークフローを構成します。

学習内容

このラボでは、次の方法について学びます。

  • Pub/Sub トピックと Eventarc を構成して Workflows をトリガーする
  • GKE Autopilot で実行されているアプリケーションに API 呼び出しを行うようにワークフローを構成する
  • Pub/Sub にメッセージをパブリッシュするようにワークフローを構成する
  • Cloud Logging と gcloud CLI を使用して Workflows の構造化ログをクエリする方法

前提条件

  • このラボは、Cloud コンソール環境と Cloud Shell 環境に精通していることを前提としています。
  • GKE と Cloud Pub/Sub の以前の経験は役立ちますが、必須ではありません。

2. 設定と要件

Cloud プロジェクトの設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は PROJECT_ID として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。
  • なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に課金が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

環境設定

検索バーの右側にあるアイコンをクリックして Cloud Shell をアクティブにします。

8613854df02635a3.png

リポジトリのクローンを作成してディレクトリに移動し、以下のコマンドをコピーしてターミナルに貼り付け、Enter キーを押します。

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

gke-lab-setup.sh を実行して、必要な依存関係をデプロイする

次のリソースが作成されます。

  • AlloyDB クラスタとインスタンス
  • GKE Autopilot クラスタ
./gke-lab-setup.sh

承認するよう求められたら、[承認] をクリックします。] をクリックしてください。

6356559df3eccdda.png

設定には 10 分ほどかかります。

スクリプトが完了し、以下の出力が表示されるまで待ってから、他の手順を実行してください。

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 クラスタ

GKE Autopilot クラスタを確認する

プロジェクトの環境変数を設定します。

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

初期設定の一環として、以下のコマンドを使用してクラスタを作成しました(このコマンドを実行する必要はありません)。

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

コマンドを実行して、作成された GKE Autopilot クラスタを表示します。

gcloud container clusters list

出力例:

772db9dd58172e0c.png

次のコマンドを実行して、クラスタの認証情報を保存します。

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

アプリケーションをデプロイする

次に、カスタマー サービス アプリケーションをデプロイします。これは、Quarkus フレームワークを使用する Java ベースのマイクロサービスです。

cymbal-eats/customer-service フォルダに移動し、次のコマンドを実行してコンテナ イメージをビルドしてアップロードします。

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

AlloyDB プライベート IP アドレスを設定します。

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

echo $DB_HOST

次のコマンドを実行して、カスタマー サービス アプリケーションがデータベースに接続するために使用するデータベース認証情報を保存する Kubernetes Secret オブジェクトを作成します。

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

次のコマンドを実行して、deployment.yaml ファイルの CUSTOMER_SERVICE_IMAGE を置き換えます。

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

コマンドを実行してアプリケーションをデプロイします。

kubectl apply -f customer-service-deployment.yaml

アプリケーションが RUNNING 状態に移行するまでに少し時間がかかります。

Deployment 仕様ファイルを確認します。

deployment.yaml.tmpl

次に、構成の中で、このアプリケーションの実行に必要なリソースを指定する部分を示します。

    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

コマンドを実行して、ワークフローで使用される外部 IP を作成します。

SERVICE_NAME=customer-service

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

次のコマンドを実行して、作成されたリソースを確認します。

kubectl get all

出力例:

179a23bd33793924.png

4. 確認ワークフロー

Workflows の基本コンセプト

ワークフローは、Workflows 構文(YAML または JSON)を使用して記述された一連のステップで構成されます。

ワークフローが作成されると、そのワークフローがデプロイされ、ワークフローを実行できるようになります。

実行とは、ワークフローの定義に含まれるロジックを 1 回実行することです。実行されなかったワークフローは課金されません。ワークフローの実行はすべて独立しており、プロダクトの迅速なスケーリングにより、多数の同時実行が可能になります。

実行コントロール

  • Steps - ワークフローを作成するには、Workflows 構文を使用して必要な steps と実行順序を定義します。すべてのワークフローには少なくとも 1 つのステップが必要です。
  • 条件 - switch ブロックは、式の値によってワークフローの実行フローを制御できるようにする選択メカニズムとして使用できます。
  • 反復処理 - for ループを使用して、一連の数値またはデータ コレクション(リストやマップなど)を反復処理できます。
  • サブワークフロー - サブワークフローはプログラミング言語のルーティンまたは関数と同様に機能し、ワークフローが複数回繰り返す 1 つのステップまたは一連のステップをカプセル化できます。

実行をトリガーする

  • 手動 - ワークフローは、Google Cloud コンソールまたは Google Cloud CLI のコマンドラインから管理できます。
  • プログラマティック - Workflows API 用の Cloud クライアント ライブラリまたは REST API を使用してワークフローを管理できます。
  • スケジュール済み - Cloud Scheduler を使用して、特定のスケジュールでワークフローを実行できます。

ランタイム引数

実行時に渡されるデータにアクセスするには、params フィールドをメイン ワークフロー(メインブロック内に配置)に追加します。main ブロックは、任意の有効な JSON データ型を 1 つの引数として受け取ります。params フィールドは、渡すデータを格納するためにワークフローが使用する変数に名前を付けます。

ワークフロー ロジック

顧客が存在しない場合、ワークフローはまず API 呼び出しを行い、顧客を作成してから、特典ポイントを更新します。ワークフローでは、注文の合計金額に基づいて乗数を選択し、お客様に特典ポイントを計算します。詳しくは、以下のサンプルをご覧ください。

    - 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. ワークフローの構成とデプロイ

次のコマンドを実行して、Service の外部 IP アドレスを表示します。

kubectl get svc

出力例:

fe5cfec2bc836a5f.png

前の出力の外部 IP の値を使用して、以下の環境変数を設定します。

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

ワークフロー テンプレートのカスタマー サービスのアプリケーションの URL を置き換えます。

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

Workflows サービスとプロジェクトの環境変数のロケーションを設定します。

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

次の権限を持つワークフローのカスタム サービス アカウントを作成します。

  • Logging API を呼び出す
  • Pub/Sub トピックにメッセージをパブリッシュする
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"

デプロイ ワークフロー。ワークフローは、前の手順で作成したサービス アカウントを使用するように構成されています。

export WORKFLOW_NAME=rewardsWorkflow

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

ワークフローのソースなどの詳細を確認します([トリガー] タブ)。現在、このワークフローを実行するように構成されているトリガーはありません。次のステップで設定します。

66ba7ebbde76d5a6.png

6. Pub/Sub トピックと Eventarc トリガーを構成する

次に、2 つの Pub/Sub トピックを作成し、1 つの Eventarc トリガーを構成します。

注文サービス アプリケーションは、新しい注文に関する情報を含むメッセージを order-topic に公開します。

ワークフローによって、注文特典ポイントと合計金額に関する情報を含むメッセージが order-points-topic に公開されます。注文サービス(このラボではデプロイされていません)は、order-points-topic, の push サブスクリプションによって使用されるエンドポイントを公開し、注文ごとの報酬ポイントと合計金額を更新します。

新しい 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

Eventarc サービスのロケーションを設定します。

gcloud config set eventarc/location ${REGION}

Eventarc トリガーがワークフローを実行するために使用するカスタム サービス アカウントを作成します。

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

ワークフローを実行する権限をサービス アカウントに付与します。

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

Pub/Sub メッセージをリッスンして Workflows に配信する Eventarc トリガーを作成する。

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

出力例:

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.

作成された Eventarc トリガーを確認します。

bda445561ad5f4.png

トリガー用に作成されたサブスクリプションを確認します。

3fccdda7d5526597.png

ワークフロー側で変更を確認します。新しいトリガーを追加しました。

23d338abc16eaac8.png

7. ワークフローのテスト

6c0606022b76f79d.png

注文サービスをシミュレートするために、Cloud Shell から Pub/Sub トピックにメッセージを送信し、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}]}'

出力例:

messageIds:
- '5063709859203105'

ワークフローの実行の詳細とログを確認します。

1e802826c700cc3e.png

57ff9705bf507fb0.png

8. ワークフロー構造化ロギング

ワークフローは、構造化ログを JSON 形式で書き込むように構成されています。ログは、Cloud Logging API と workflows.googleapis.com/Workflow リソースを使用して、projects/${PROJECT_ID}/logs/Workflows というログ名で書き込まれます。

以下のロギング構成を確認します。

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

Cloud コンソールでログ エクスプローラを開き、クエリを実行して、合計金額が 2 ドルを超える処理済みの注文を見つけます。

検索クエリフィールドを表示するには、[クエリを表示] をクリックします。

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"

出力例:

9093f87159f1b928.png

Cloud Shell を開き、以下のコマンドで gcloud CLI を使用してログを読み取る

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

table 形式を使用した出力例:

35d5fd851ecde60.png

次のコマンドを実行して、ログを 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

json 形式を使用した出力例:

ac7421548ea9a9f2.png

9. 顧客記録の確認

(省略可能な手順)

以下のコマンドを実行して、カスタマー サービスの URL の環境変数を設定します。

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

curl $CUSTOMER_SERVICE_URL/customer | jq

出力例:

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

新しい注文を複数回公開するコマンドを実行し、curl コマンドを使用してお客様の特典ポイントを確認します。

新しい注文メッセージをパブリッシュします。

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

お客様の特典ポイントを確認する:

curl $CUSTOMER_SERVICE_URL/customer | jq

次のコマンドを実行して、最新のログを確認します。

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. お疲れさまでした

お疲れさまでした。これでこの Codelab は終了です。

学習した内容

  • Workflows をトリガーするように Pub/Sub トピックと Eventarc を構成する方法
  • GKE Autopilot で実行されているアプリケーションに API 呼び出しを行うようにワークフローを構成する方法
  • Pub/Sub にメッセージをパブリッシュするようにワークフローを構成する方法
  • Cloud Logging と gcloud CLI を使用して Workflows の構造化ログをクエリする方法

次のステップ:

Cymbal Eats の他の Codelab を確認する:

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。