透過 Eventarc 事件觸發 Cloud Run

1. 簡介

894762ebb681671c.png

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

cb762f29e9183a3f.png

Eventarc 可讓您輕鬆將各種服務 (Cloud Run、Cloud Functions、Workfklows) 與來自各種來源的事件連結。Kubernetes 可讓您建構事件導向的架構,其中微服務的鬆耦合和分佈情形很低。它也能處理事件擷取、提交、安全性、授權和錯誤處理等工作,提升開發人員的靈活性和應用程式彈性。

在本程式碼研究室中,您將瞭解 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 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

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

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

55efc1aaa7a4d3ad.png

佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:

7ffe5cbb04455448.png

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。這個研究室中的所有工作都可以透過瀏覽器完成。

事前準備

在 Cloud Shell 中,請確認您已設定專案 ID:

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

4. 部署 Cloud Run 服務

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

首先,請為 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 支援的觸發條件,但有時可能會想使用現有主題。Eventarc 可讓您使用 --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_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

您也需要將 pubsub.publisher 角色新增到 Cloud Storage 服務帳戶,以便使用 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

建立

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

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 值區:

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

如果在 Cloud 控制台中查看 Cloud Run 服務的記錄檔,應該會看到收到的事件:

904cfc93bb8e8df1.png

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

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

設定

如要接收服務中的事件,請啟用 Cloud 稽核記錄。在 Cloud 控制台中,選取左上方的選單中的「IAM & Admin」和「Audit Logs」。在服務清單中,勾選 Google Cloud Storage

3c654597faed237c.png

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

1deb3ad78f11dd5f.png

建立

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

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 值區:

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

如果在 Cloud 控制台中查看 Cloud Run 服務的記錄檔,應該會看到收到的事件:

7be7859bcc8976f8.png

9. 探索 Eventarc 使用者介面

在這個步驟中,您將探索 Google Cloud 控制台中的 Eventarc UI。在 Eventarc UI 中,您可以透過 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 使用者介面