1. 概要
このラボでは、Pub/Sub トピックを Workflows サービスに接続する Eventarc トリガーを作成します。Eventarc を使用すると、サービス間通信を分離できるため、ソリューションの拡張性が高まり、イベント ドリブンになります。Cymbal Eats での注文に対するお客様の特典ポイントを計算するためのビジネス プロセスを実行する、複数のステップを含むワークフローを作成します。ワークフローは限定公開の Cloud Run サービス API を呼び出して、ビジネス ロジックを実行します。Cloud Run サービスは内部トラフィックのみを許可するように構成されており、認証が必要です。ワークフローは Pub/Sub トピックにメッセージをパブリッシュし、計算された特典ポイントについて注文サービスに通知します。
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 テンプレートの更新など、さまざまな直接イベントによってトリガーできます。
イベントの宛先
- Workflows
- Cloud Run
- GKE
- Cloud Functions(第 2 世代)
Workflows とは
Workflows は、マイクロサービス、タスク、API を統合できるフルマネージド サービスです。Workflows はサーバーレス サービスで、需要に応じてスケーリングします。
Workflows のユースケース:
- イベント ドリブン ワークフローは、定義されたトリガーで実行されます。たとえば、新しい注文が送信され、顧客のポイントを計算したい場合などです。また、注文がキャンセルされたときにイベントを公開し、関連するすべてのサービスがイベントを処理するようにすることもできます。
- バッチジョブ ワークフローは、Cloud Scheduler を使用してジョブを定期的に実行します。たとえば、失敗ステータスのメニュー項目を確認し、項目を削除する夜間のジョブなどです。
Workflows は、サービスをオーケストレートするワークフローに最適です。最大 1 年間の待機や再試行などのプロセスを自動化できます。
Workflows のメリット:
- コードよりも構成を優先: コードを記述するのではなく、ロジックを構成に移行することで、技術的負債を削減します。
- アーキテクチャを簡素化する。ステートフル ワークフローを使用すると、追加の依存関係なしで複雑なサービス統合を可視化してモニタリングできます。
- 信頼性とフォールト トレランスを組み込みます。デフォルトまたはカスタムの再試行ロジックで障害を制御し、他のシステムで障害が発生した場合でもエラーを処理できます。すべてのステップを Cloud Spanner にチェックポイントすることで、進行状況を追跡できます。
- メンテナンス不要。必要に応じたスケーリング: パッチやメンテナンスは不要です。ワークフローが実行された場合にのみ料金が発生し、待機中やアクティブでない間も費用は発生しません。
このラボでは、イベント ドリブンのワークフローを構成します。
学習内容
このラボでは、次の方法について学びます。
- Pub/Sub トピックと Eventarc を構成して Workflows をトリガーする
- Cloud Run サービスを呼び出して Pub/Sub にメッセージをパブリッシュするようにワークフローを構成する
- Cloud Logging と gcloud CLI を使用して Workflows の構造化ログをクエリする方法
前提条件
- このラボは、Cloud コンソール環境と Cloud Shell 環境に精通していることを前提としています。
- Cloud Run と Cloud Pub/Sub の以前の経験は役立ちますが、必須ではありません。
2. 設定と要件
Cloud プロジェクトの設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は
PROJECT_ID
として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。 - なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に課金が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
環境設定
検索バーの右側にあるアイコンをクリックして Cloud Shell をアクティブにします。
リポジトリのクローンを作成してディレクトリに移動し、以下のコマンドをコピーしてターミナルに貼り付け、Enter キーを押します。
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
lab-setup.sh
を実行して、必要な依存関係をデプロイする
次のリソースが作成されます。
- AlloyDB クラスタとインスタンス
- Cloud Run ジョブとカスタマー サービスのコンテナ イメージを保存する Artifact Registry
- Cloud Run サービスとジョブが AlloyDB データベースと通信するための VPC アクセス コネクタ
- AlloyDB データベースを作成する Cloud Run ジョブ
- Cloud Run カスタマー サービス - Quarkus フレームワークを使用する Java ベースのマイクロサービス。
./lab-setup.sh
承認するよう求められたら、[承認] をクリックします。] をクリックしてください。
設定には 10 分ほどかかります。
スクリプトが完了し、以下の出力が表示されるまで待ってから、他の手順を実行してください。
Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1] OK Deploying new service... Done. OK Creating Revision... OK Routing traffic... Done. Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic. Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app
次のセクションに目を通してから、次のステップから再開できます。
3. 確認ワークフロー
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 フィールドは、渡すデータを格納するためにワークフローが使用する変数に名前を付けます。
Cloud Run サービス認証へのワークフロー
カスタマー サービスはこのリポジトリに含まれるサンプル アプリケーションであり、Cloud Run 上で実行され、内部ネットワークからの認証済みリクエストのみを許可するように構成されています。Google によって署名された OpenID Connect(OIDC)トークンをリクエストに追加して、Cloud Run サービスで認証するように Workflows を構成します。
サービス間認証について詳しくは、ドキュメントをご覧ください。
ワークフロー認証は、args
ブロックで auth
セクションを使用して構成されます。
rewardsWorkflow.yaml.tmpl
- create_customer: call: http.post args: url: CUSTOMER_SERVICE_URL/customer auth: type: OIDC
ワークフロー ロジック
顧客が存在しない場合、このワークフローはまず 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}
4. ワークフローの構成とデプロイ
環境変数を設定します。
export REGION=us-east1
export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
echo $CUSTOMER_SERVICE_URL
ワークフロー テンプレートのサービス URL を置き換えます。
sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.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)')
次の権限を持つワークフローのカスタム サービス アカウントを作成します。
- Cloud Run サービスを呼び出す
- Logging API を呼び出す
- Pub/Sub トピックにメッセージをパブリッシュする
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-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/run.invoker"
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=rewardsWorkflow.yaml \
--service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com
ワークフローのソースなどの詳細を確認します([トリガー] タブ)。現在、このワークフローを実行するように構成されているトリガーはありません。次のステップで設定します。
5. 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 トリガーを確認します。
トリガー用に作成されたサブスクリプションを確認します。
ワークフロー側で変更を確認します。新しいトリガーを追加しました。
6. テスト ワークフロー
注文サービスをシミュレートするために、Cloud Shell から Pub/Sub トピックにメッセージを送信し、Cloud コンソールで Cloud Run カスタマー サービスのログを確認します。
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'
ワークフローの実行の詳細とログを確認します。
7. ワークフロー構造化ロギング
ワークフローは、構造化ログを 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
コンソールでログ エクスプローラを開き、合計金額が 2 ドルを超える処理済み注文についてクエリを実行します。
以下のクエリを使用します。プロジェクト ID(qwiklabs-gcp-01-1a990bfcadb3
)を現在のプロジェクト ID に置き換えます。
resource.type="workflows.googleapis.com/Workflow" AND
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2022-11-01T23:59:59Z" AND
timestamp <= "2023-11-05T00:00:00Z"
出力例:
Cloud Shell を開き、以下のコマンドで gcloud CLI を使用してログを読み取る。
プロジェクト ID(qwiklabs-gcp-01-1a990bfcadb3
)を現在のプロジェクト ID に置き換えます。
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
table
形式を使用した出力例:
プロジェクト ID(qwiklabs-gcp-01-1a990bfcadb3
)を現在のプロジェクト ID に置き換えます。
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq
json
形式を使用した出力例:
8. 顧客記録の確認
(省略可能な手順)現在のところ、customer-service
は内部ネットワークからのトラフィックのみを受け入れるように構成されています。
以下のコマンドを実行してサービス URL を保存し、customer-service を呼び出します。
export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer
アクセスが禁止されているというエラー メッセージが表示されます。
<html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>403 Forbidden</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Forbidden</h1> <h2>Access is forbidden.</h2> <h2></h2> </body></html>
既存の顧客レコードを表示するには、Cloud Run の customer-service
の上り(内向き)設定を「Allow all traffic
」に変更します[保存]をクリックします
これでエンドポイントが公開され、curl を使用して Cloud Shell からカスタマー サービス API を呼び出せるようになります。
以下のコマンドを実行してサービス URL を保存し、既存の顧客を一覧表示します。
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq
出力例:
[ { "id": "id1", "rewardPoints": 3, "address": "1845 Denise St", "city": "Mountain View", "createDateTime": "2022-11-11T15:56:45.487566", "email": "ajensen9090+eats@gmail.com", "name": "Angela Jensen", "state": "CA", "updateDateTime": "2022-11-11T15:56:45.866125", "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 -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq
ログを確認する。プロジェクト ID(qwiklabs-gcp-01-1a990bfcadb3
)を現在のプロジェクト ID に置き換えます。
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
9. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- Workflows の構成方法
- Workflows 用に Eventarc トリガーを構成する方法
- Workflows から Cloud Run サービスを呼び出す方法
- Cloud Logging と gcloud CLI を使用して構造化ログをクエリする方法
次のステップ:
Cymbal Eats の他の Codelab を確認する:
- Cloud Storage からのイベント処理のトリガー
- Cloud Run から Private Cloud SQL への接続
- Cloud Run からフルマネージド データベースへの接続
- Identity-Aware Proxy(IAP)でサーバーレス アプリケーションを保護する
- Cloud Scheduler を使用した Cloud Run ジョブのトリガー
- Cloud Run への安全なデプロイ
- Cloud Run の上り(内向き)トラフィックの保護
- GKE Autopilot からプライベート AlloyDB への接続
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。