接收 Cloud Storage 的直接事件 (gcloud CLI)
本快速入門導覽課程說明如何使用 Eventarc,在未經驗證的 Cloud Run 服務中接收 Cloud Storage 的直接事件 (不使用 Cloud 稽核記錄)。
您可以設定在 Cloud Storage bucket 內發生各種事件時觸發通知,包括建立、刪除、封存物件,以及更新中繼資料。詳情請參閱「建立觸發條件,將 Cloud Storage 事件路由至 Cloud Run」。
在本快速入門導覽課程中,您將:
建立 Cloud Storage bucket 做為事件來源。
將事件接收器服務部署至 Cloud Run。
建立 Eventarc 觸發條件。
將檔案上傳至 Cloud Storage bucket 以產生事件,並在 Cloud Run 記錄檔中查看該事件。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
-
建立專案:如要建立專案,您需要具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
-
建立專案:如要建立專案,您需要具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Cloud Run、Cloud Storage、Eventarc 和 Pub/Sub API。
gcloud services enable \ eventarc.googleapis.com \ pubsub.googleapis.com \ run.googleapis.com \ storage.googleapis.com
- 更新
gcloud元件:gcloud components update
- 登入帳戶:
gcloud auth login
- 設定本快速入門導覽課程中使用的設定變數:
gcloud config set run/region us-central1 gcloud config set run/platform managed gcloud config set eventarc/location us-central1
-
如果您是專案建立者,系統會授予基本「擁有者」角色 (
roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地的「角色和權限」頁面。
所需權限
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Cloud Run 管理員 (
roles/run.admin) - Eventarc 管理員 (
roles/eventarc.admin) -
記錄檔檢視存取者 (
roles/logging.viewAccessor) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) -
服務帳戶管理員 (
roles/iam.serviceAccountAdmin) -
服務帳戶使用者 (
roles/iam.serviceAccountUser) - 服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin) - 儲存空間管理員 (
roles/storage.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- Cloud Run 管理員 (
記下 Compute Engine 預設服務帳戶,因為您會將其附加至 Eventarc 觸發程序,代表觸發程序的身分進行測試。啟用或使用採用 Compute Engine 的服務後,系統會自動建立這個服務帳戶,電子郵件地址格式如下: Google Cloud
PROJECT_NUMBER-compute@developer.gserviceaccount.com
將
PROJECT_NUMBER替換為 Google Cloud專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面找到專案編號,也可以執行下列指令:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
- 將專案的Eventarc 事件接收者角色 (
roles/eventarc.eventReceiver) 授予 Compute Engine 預設服務帳戶,以便 Eventarc 觸發條件接收事件供應商的事件。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- 建立 Cloud Storage 直接事件的觸發條件前,請先將 Pub/Sub 發布者角色 (
roles/pubsub.publisher) 授予 Cloud Storage 服務代理:SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
- 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請將服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) 授予服務代理,以支援已驗證的 Pub/Sub 推送要求。否則,系統會預設授予這個角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
建立 Cloud Storage 值區
建立要用做事件來源的 Cloud Storage bucket:gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1
建立事件來源後,即可在 Cloud Run 上部署事件接收器服務。
將事件接收器服務部署至 Cloud Run
使用預先建構的映像檔部署 Cloud Run 服務,接收並記錄事件:us-docker.pkg.dev/cloudrun/container/hello
gcloud run deploy helloworld-events \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--allow-unauthenticated
部署成功後,指令列會顯示服務網址。
您已將名為 helloworld-events
的事件接收器服務部署至 Cloud Run,現在可以設定觸發條件。
建立 Eventarc 觸發條件
Eventarc 觸發條件會將 Cloud Storage bucket 中的事件傳送至 helloworld-events Cloud Run 服務。
建立用來篩選 Cloud Storage 事件的觸發條件,並使用 Compute Engine 預設服務帳戶。
gcloud eventarc triggers create storage-events-trigger \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com這項操作會建立名為
storage-events-trigger的觸發條件。請注意,在 Google Cloud 專案中首次建立 Eventarc 觸發條件時,Eventarc 服務代理程式的佈建作業可能會延遲。通常只要再次嘗試建立觸發條件,就能解決這個問題。詳情請參閱「權限遭拒錯誤」。
如要確認
storage-events-trigger是否已建立妥當,請執行:gcloud eventarc triggers list --location=us-central1輸出結果會與下列內容相似:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE storage-events-trigger google.cloud.storage.object.v1.finalized helloworld-events Yes
產生及查看活動
如要產生事件,請將文字檔案上傳到 Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
上傳作業會產生事件,而 Cloud Run 服務會記錄事件的訊息。
如要查看記錄項目、篩選記錄項目,然後以 JSON 格式傳回輸出內容:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
尋找類似下列內容的記錄項目:
jsonPayload: event: ... eventType: google.cloud.storage.object.v1.finalized message: | Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "PROJECT_ID-bucket/random.txt/1713970683868432", "selfLink": "https://www.googleapis.com/storage/v1/b/PROJECT_ID-bucket/o/random.txt", "name": "random.txt", "bucket": "PROJECT_ID-bucket", ... }
恭喜!您已成功將事件接收器服務部署至 Cloud Run、建立 Eventarc 觸發條件、從 Cloud Storage 產生事件,並在 Cloud Run 記錄檔中查看該事件。
清除所用資源
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費。
您可以:
或者,您也可以刪除 Google Cloud 專案,以免產生費用。 刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID
如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。