1. 簡介

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

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 事件目的地。

Google Cloud 來源 | Google Cloud 擁有的產品 |
Google 來源 | Google 擁有的產品,例如 Gmail、Hangouts、Android 管理服務等 |
自訂來源 | 非 Google 產品的活動來源,由使用者自行建立 |
第三方來源 | 既非 Google 所有,也非客戶製作的活動來源。包括 Check Point CloudGuard、Datadog、ForgeRock、Lacework 等熱門事件來源,這些來源由第三方供應商和合作夥伴擁有及維護。 |
為確保跨服務互通性,系統會將事件正規化為 CloudEvents v1.0 格式。CloudEvents 是與供應商無關的開放規格,用於以通用格式描述事件資料,可在服務、平台和系統之間實現互通性。
3. 設定和需求
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



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

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

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 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 執行個體的「記錄」專區查看:

使用現有 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 服務記錄時,您應該會看到收到的事件:

8. 建立 Cloud 稽核記錄觸發條件
雖然 Cloud Storage 觸發條件是監聽 Cloud Storage 事件的較佳方式,但在此步驟中,您會建立 Cloud 稽核記錄觸發條件來執行相同作業。
設定
如要接收來自服務的事件,您必須啟用 Cloud 稽核記錄。在 Cloud 控制台中,選取左上方的選單 IAM & Admin 和 Audit Logs。在服務清單中,檢查 Google Cloud Storage:

確認已選取右側的 Admin、Read 和 Write,然後按一下 Save:

建立
建立觸發條件,將 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 服務記錄時,您應該會看到收到的事件:

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

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

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

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

10. 恭喜!
恭喜您完成本程式碼研究室。
涵蓋內容
- Eventarc 的願景
- 探索 Eventarc 中的事件
- 建立 Cloud Run 接收器
- 建立 Pub/Sub 觸發條件
- 建立 Cloud Storage 的觸發條件
- 為 Cloud 稽核記錄建立觸發條件
- 探索 Eventarc 使用者介面