接收 Cloud Storage 的直接事件 (gcloud CLI)

本快速入門導覽課程說明如何使用 Eventarc,在未經驗證的 Cloud Run 服務中接收 Cloud Storage 的直接事件 (不使用 Cloud 稽核記錄)。

您可以設定在 Cloud Storage bucket 內發生各種事件時觸發通知,包括建立、刪除、封存物件,以及更新中繼資料。詳情請參閱「建立觸發條件,將 Cloud Storage 事件路由至 Cloud Run」。

在本快速入門導覽課程中,您將:

  1. 建立 Cloud Storage bucket 做為事件來源。

  2. 將事件接收器服務部署至 Cloud Run。

  3. 建立 Eventarc 觸發條件。

  4. 將檔案上傳至 Cloud Storage bucket 以產生事件,並在 Cloud Run 記錄檔中查看該事件。

事前準備

貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 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 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 安裝 Google Cloud CLI。

  8. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  9. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  10. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 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 專案名稱。

  11. 確認專案已啟用計費功能 Google Cloud

  12. 啟用 Cloud Run、Cloud Storage、Eventarc 和 Pub/Sub API。

    gcloud services enable \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    run.googleapis.com \
    storage.googleapis.com
  13. 更新 gcloud 元件:
    gcloud components update
  14. 登入帳戶:
    gcloud auth login
  15. 設定本快速入門導覽課程中使用的設定變數:
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  16. 如果您是專案建立者,系統會授予基本「擁有者」角色 (roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。

    如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地的「角色和權限」頁面。

    所需權限

    如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

  17. 記下 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)'

    在正式環境中,我們強烈建議建立新的服務帳戶,並授予一或多個包含最低必要權限的 IAM 角色,同時遵循最低權限原則。

  18. 將專案的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
  19. 建立 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'
  20. 如果您是在 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 服務。

  1. 建立用來篩選 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 服務代理程式的佈建作業可能會延遲。通常只要再次嘗試建立觸發條件,就能解決這個問題。詳情請參閱「權限遭拒錯誤」。

  2. 如要確認 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
    

產生及查看活動

  1. 如要產生事件,請將文字檔案上傳到 Cloud Storage:

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    上傳作業會產生事件,而 Cloud Run 服務會記錄事件的訊息。

  2. 如要查看記錄項目、篩選記錄項目,然後以 JSON 格式傳回輸出內容:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
    
  3. 尋找類似下列內容的記錄項目:

    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 記錄檔中查看該事件。

清除所用資源

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費。

您可以:

  1. 刪除 Cloud Storage 值區

  2. 刪除 Cloud Run 服務

  3. 刪除 Eventarc 觸發條件

或者,您也可以刪除 Google Cloud 專案,以免產生費用。 刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。

刪除 Google Cloud 專案:

gcloud projects delete PROJECT_ID

如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。

後續步驟