透過 Eventarc 事件觸發 Cloud Run

1. 簡介

894762ebb681671c.png

Cloud Run 可讓您在全代管環境中執行無狀態容器。這項服務是以開放原始碼的 Knative 打造而成,可讓您選擇透過 Cloud Run 全代管的方式執行容器,或是透過 Cloud Run for Anthos 在您的 Google Kubernetes Engine 叢集中執行容器。

cb762f29e9183a3f.png

Eventarc 可輕鬆將各種服務 (Cloud Run、Cloud Functions、Workflows) 連接至各種來源的事件。您可以在其中建構微服務鬆耦合的分散式事件導向架構。此外,這項服務還會為您處理事件擷取、傳送、安全防護、授權和錯誤處理作業,進而提升開發人員的靈活度和應用程式的復原能力。

在本程式碼研究室中,您將瞭解 Eventarc。具體來說,您將使用 Eventarc 監聽 Pub/Sub、Cloud Storage 和 Cloud 稽核記錄的事件,並將這些事件傳遞至 Cloud Run 服務。

課程內容

  • Eventarc 的願景
  • 探索 Eventarc 中的事件
  • 建立 Cloud Run 接收器
  • 建立 Pub/Sub 觸發條件
  • 建立 Cloud Storage 的觸發條件
  • 為 Cloud 稽核記錄建立觸發條件
  • 探索 Eventarc 使用者介面

2. Eventarc 的願景

Eventarc 的目標是將各種 Google、Google Cloud 和第三方事件來源的事件傳送至 Google Cloud 事件目的地。

59b147dc030b2b0b.png

Google Cloud 來源

Google Cloud 擁有的產品

Google 來源

Google 擁有的產品,例如 Gmail、Hangouts、Android 管理服務等

自訂來源

非 Google 產品的活動來源,由使用者自行建立

第三方來源

既非 Google 所有,也非客戶製作的活動來源。包括 Check Point CloudGuard、Datadog、ForgeRock、Lacework 等熱門事件來源,這些來源由第三方供應商和合作夥伴擁有及維護。

為確保跨服務互通性,系統會將事件正規化為 CloudEvents v1.0 格式。CloudEvents 是與供應商無關的開放規格,用於以通用格式描述事件資料,可在服務、平台和系統之間實現互通性。

3. 設定和需求

自修實驗室環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串,您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中不得重複,且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為 PROJECT_ID),因此如果您不喜歡該字串,可以產生另一個隨機字串,或是嘗試使用自己的字串,看看是否可用。專案建立後,系統就會「凍結」該值。
  • 還有第三個值,也就是部分 API 使用的「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要停用資源,避免在本教學課程結束後繼續產生帳單費用,請按照程式碼研究室結尾的「清除」操作說明操作。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

啟動 Cloud Shell

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

在 GCP 主控台,按一下右上角工具列的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的內容:

7ffe5cbb04455448.png

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本實驗室的所有工作都可在瀏覽器上完成。

事前準備

在 Cloud Shell 中,確認專案 ID 已設定完畢:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. 部署 Cloud Run 服務

部署 Cloud Run 服務來接收事件。您將部署 Cloud Run 的 Hello 容器,記錄 CloudEvents 的內容。

首先,請為 Cloud Run 啟用必要服務:

gcloud services enable run.googleapis.com

將 hello 容器部署至 Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

成功完成後,指令列會顯示服務網址。您可以在任何瀏覽器視窗中開啟服務網址,再次確認服務已部署完成。

5. 探索活動

在 Eventarc 中建立觸發條件前,您可以探索事件來源、可發出的事件類型,以及如何設定觸發條件來取用這些事件。

如要查看不同類型事件的清單,請執行下列指令:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

如要進一步瞭解每個事件類型,請執行下列指令:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

如要查看會發出特定事件類型的服務清單,請執行下列指令:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

如要查看每個服務可發出的方法名稱 (子事件) 清單:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. 建立 Pub/Sub 觸發條件

接收事件的方式之一是透過 Cloud Pub/Sub。任何應用程式都可以將訊息發布至 Pub/Sub,而這些訊息可透過 Eventarc 傳送至 Cloud Run。

設定

建立任何觸發條件前,請先為 Eventarc 啟用必要服務:

gcloud services enable eventarc.googleapis.com

您也需要供觸發條件使用的服務帳戶。建立服務帳戶:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

建立

建立觸發條件,將發布到 Pub/Sub 主題的事件篩選至已部署的 Cloud Run 服務:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

測試

Pub/Sub 觸發條件會在幕後建立主題。讓我們找出該值並指派給變數:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

使用 gcloud 將訊息發布至主題:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Cloud Run 服務會記錄傳入訊息的內容。您可以前往 Cloud Run 執行個體的「記錄」專區查看:

69e0177e04a0d1af.png

使用現有 Pub/Sub 主題建立

根據預設,建立 Pub/Sub 觸發條件時,Eventarc 會在幕後建立主題,供您在應用程式和 Cloud Run 服務之間做為傳輸主題。這項功能可輕鬆快速地建立 Pub/Sub 支援的觸發條件,但有時您可能想使用現有主題。您可以使用 --transport-topic gcloud 旗標,在同一個專案中指定現有的 Pub/Sub 主題。

如要瞭解運作方式,請建立 Pub/Sub 主題做為傳輸主題:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

建立觸發條件:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

您可以傳送訊息至主題來測試觸發條件:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. 建立 Cloud Storage 觸發條件

在這個步驟中,您將建立觸發條件來監聽 Cloud Storage 的事件。

設定

首先,建立要接收事件的 bucket:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

授予 eventarc.eventReceiver 角色,以便在 Cloud Storage 觸發程序中使用服務帳戶:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

您也需要為 Cloud Storage 觸發程序將 pubsub.publisher 角色新增至 Cloud Storage 服務帳戶:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

建立

建立觸發條件,將 bucket 中新檔案的建立事件,轉送至您的服務:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

測試

列出所有觸發條件,確認已成功建立:

gcloud eventarc triggers list

將檔案上傳至 Cloud Storage bucket:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

在 Cloud Console 中查看 Cloud Run 服務記錄時,您應該會看到收到的事件:

904cfc93bb8e8df1.png

8. 建立 Cloud 稽核記錄觸發條件

雖然 Cloud Storage 觸發條件是監聽 Cloud Storage 事件的較佳方式,但在此步驟中,您會建立 Cloud 稽核記錄觸發條件來執行相同作業。

設定

如要接收來自服務的事件,您必須啟用 Cloud 稽核記錄。在 Cloud 控制台中,選取左上方的選單 IAM & AdminAudit Logs。在服務清單中,檢查 Google Cloud Storage

3c654597faed237c.png

確認已選取右側的 AdminReadWrite,然後按一下 Save

1deb3ad78f11dd5f.png

建立

建立觸發條件,將 bucket 中新檔案的建立事件,轉送至您的服務:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

測試

稽核記錄觸發程序需要一些時間才能完成初始化。您可以列出所有觸發條件,確認是否已建立:

gcloud eventarc triggers list

您應該會看到 ACTIVE 欄位為 Yes

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

將同一個檔案上傳至先前使用的 Cloud Storage bucket:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

在 Cloud Console 中查看 Cloud Run 服務記錄時,您應該會看到收到的事件:

7be7859bcc8976f8.png

9. 探索 Eventarc 使用者介面

在這個步驟中,您將探索 Google Cloud 控制台中的 Eventarc 使用者介面。在 Eventarc 使用者介面中,您可以查看所有觸發程序的總覽、編輯及刪除觸發程序,以及透過 Google Cloud 控制台建立新的觸發程序。

前往 Google Cloud 的 Eventarc 專區:

81e139f17e0d29bf.png

畫面上會顯示您先前建立的觸發條件清單:

3240c7c830398718.png

按一下觸發條件即可查看詳細資料、編輯或刪除觸發條件:

b4d8bbc6601a8b9e.png

您也可以選取 Create trigger 並填寫觸發條件詳細資料,建立新的觸發條件:

3ee290ec72f130d5.png

10. 恭喜!

恭喜您完成本程式碼研究室。

涵蓋內容

  • Eventarc 的願景
  • 探索 Eventarc 中的事件
  • 建立 Cloud Run 接收器
  • 建立 Pub/Sub 觸發條件
  • 建立 Cloud Storage 的觸發條件
  • 為 Cloud 稽核記錄建立觸發條件
  • 探索 Eventarc 使用者介面