Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣。您可以指定觸發條件的篩選器 (包括事件來源) 和目標工作流程,設定事件轉送。
系統會透過 HTTP 要求,以 CloudEvents 格式傳送事件。Workflows 服務會將事件轉換為 JSON 物件 (遵循 CloudEvents 規格),並將事件做為工作流程執行階段引數傳遞至工作流程執行作業。請確保事件大小不超過 512 KB。 如果事件大於 Workflows 引數大小上限,就不會觸發工作流程執行作業。
請參閱下列操作說明,瞭解如何設定事件路徑,以便在收到直接Cloud Storage 事件時觸發工作流程執行作業。這適用於 Cloud Storage 事件提供者。詳情請參閱支援的直接事件清單。準備建立觸發條件
為目標工作流程建立 Eventarc 觸發程序前,請先完成下列工作。
主控台
在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
啟用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API。
如有需要,請啟用與直接事件相關的 API。舉例來說,如要使用 Cloud Storage 活動,請啟用Cloud Storage API。
如果沒有,請建立使用者代管的服務帳戶,然後授予必要的角色和權限,讓 Eventarc 管理目標工作流程的事件。
前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。
選取專案。
在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Google Cloud 控制台會根據這個名稱填入「服務帳戶 ID」欄位。
在「服務帳戶說明」欄位中輸入說明。例如:
Service account for event trigger
。按一下「建立並繼續」。
如要提供適當的存取權,請在「Select a role」(請選擇角色) 清單中,選取要授予服務帳戶的必要 Identity and Access Management (IAM) 角色。詳情請參閱「工作流程目標的角色和權限」。
如要新增其他角色,請按一下「新增其他角色」
,然後新增每個其他角色。按一下「繼續」。
按一下「完成」,即可完成帳戶建立程序。
將 Pub/Sub 發布者角色授予 Cloud Storage 服務代理。通常是
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
。您可以擷取 Cloud Storage 服務代理程式的電子郵件地址。前往 Google Cloud 控制台的「IAM」頁面。
在 Cloud Storage 服務代理的列中,按一下「編輯主體」
。(如果未列出服務代理程式,請繼續下一個步驟)。「編輯存取權」窗格隨即開啟。- 按一下「新增其他角色」add,然後搜尋「Pub/Sub 發布者」角色。
- 選取角色。
- 按一下 [儲存]。
如果服務代理人未列出,請按一下「授予存取權」
。「授予存取權」窗格隨即開啟。- 在「New principals」(新增主體) 欄位中,輸入服務代理人的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,搜尋「Pub/Sub Publisher」(Pub/Sub 發布者) 角色。
- 選取角色。
- 按一下「儲存」。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
啟用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API:
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ workflows.googleapis.com \ workflowexecutions.googleapis.com
如有需要,請啟用與直接事件相關的 API。舉例來說,如要啟用 Cloud Storage 活動,請啟用
storage.googleapis.com
。如果沒有,請建立使用者代管的服務帳戶,然後授予必要角色和權限,讓 Eventarc 管理目標工作流程的事件。
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME
改為服務帳戶名稱。長度必須介於 6 至 30 個字元之間,可以使用小寫英數字元和破折號。建立服務帳戶後,就無法變更名稱。授予必要的 Identity and Access Management (IAM) 角色或權限。詳情請參閱「工作流程目標的角色和權限」。
如要為直接 Cloud Storage 事件建立觸發條件,請將
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"
建立觸發條件
您可以透過 Google Cloud CLI (gcloud
或 Terraform) 或 Google Cloud 控制台,建立以已部署工作流程做為事件接收端的 Eventarc 觸發程序。
主控台
- 在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。
- 按一下「建立觸發條件」 。
- 輸入觸發條件名稱。
這是觸發條件的 ID,開頭必須是英文字母。最多可包含 63 個小寫英文字母、數字或連字號。
- 在「Trigger type」(觸發條件類型) 中,選取「Google sources」(Google 來源)。
- 在「Event provider」(事件提供者) 清單中,選取「Cloud Storage」。
請注意,相關Google Cloud 文件中使用的事件提供者名稱可能沒有 Cloud 或 Google Cloud 前置字元。舉例來說,在控制台中,「Memorystore for Redis」稱為「Memorystore for Redis」Google Cloud 。
- 在「Event type」(事件類型) 清單中,從「Direct」(直接) 事件選取事件類型:
- google.cloud.storage.object.v1.archived:當物件的使用中版本遭到封存或刪除時,系統會傳送事件。只有版本控制值區才會傳送這項事件。
- google.cloud.storage.object.v1.delete:物件永久刪除時傳送的事件。視值區的物件版本管理設定而定,這表示:
- 如果是啟用版本管理的值區,只有在永久刪除版本時才會傳送這個事件 (封存物件時不會傳送)。
- 如果值區未啟用版本管理功能,則系統在刪除或覆寫物件時,會傳送這個事件。
- google.cloud.storage.object.v1.finalized:在 bucket 中建立新物件 (或覆寫現有物件,並建立該物件的新產生版本) 時,系統會傳送這個事件。
- google.cloud.storage.object.v1.metadataUpdated:現有物件的 [中繼資料](/storage/docs/metadata)變更時,系統會傳送這項事件。
- 在「事件資料內容類型」清單中,選取事件酬載的編碼。
如果是來自 Cloud Storage的直接事件,則必須為 application/json。
- 指定或瀏覽 Cloud Storage Bucket 的全域不重複 ID。
Cloud Storage 值區必須與 Eventarc 觸發程序位於相同的Google Cloud 專案和區域或多區域。
- 選取「區域」。
Eventarc 的 Cloud Storage 觸發程序適用於單一區域、雙區域和多區域位置。請注意,Cloud Storage bucket 必須與 Eventarc 觸發程序位於相同 Google Cloud 專案和區域或多區域。
系統會使用 Cloud Storage 的 Pub/Sub 通知傳送事件。如果為同一個值區註冊過多通知,可能會超出值區的通知上限 (如錯誤
Cloud Storage bucket ...: Pub/Sub notification limit reached
所示)。您最多可以在值區中建立 10 項設定,讓系統在特定事件出現時觸發通知。如要查看更多配額和限制,請參閱 Cloud Storage 配額與限制頁面。 - 選取要叫用服務或工作流程的服務帳戶。
或者,您也可以建立新的服務帳戶。
這會指定與觸發程序相關聯的 Identity and Access Management (IAM) 服務帳戶電子郵件,您先前已授予該帳戶 Eventarc 所需的特定角色。
- 在「Event destination」(事件目的地) 清單中,選取「Workflows」。
- 選取工作流程。
這是要將事件傳送至的工作流程名稱。工作流程執行的事件會經過轉換,並以執行階段引數的形式傳遞至工作流程。
詳情請參閱 建立 Workflows 的觸發條件。
- 如要新增標籤,請按一下 什麼是標籤?」 「新增標籤」。標籤是鍵/值組合,可協助您整理Google Cloud 資源。詳情請參閱「
- 點選「建立」。
觸發條件建立後,事件來源篩選器就無法修改。 請改為建立新的觸發條件,並刪除舊的觸發條件。詳情請參閱「管理觸發條件」。
gcloud
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-workflow=DESTINATION_WORKFLOW \ --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters="bucket=BUCKET" \ --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"
更改下列內容:
TRIGGER
:觸發條件的 ID 或完整 ID。LOCATION
:Eventarc 觸發條件的位置,適用於單一區域、雙區域和多區域位置;您無法建立global
Eventarc 觸發條件。請注意,Cloud Storage bucket 必須與 Eventarc 觸發條件位於相同 Google Cloud 專案和區域。詳情請參閱「Eventarc 位置」。-
DESTINATION_WORKFLOW
:已部署的工作流程 ID,用於接收觸發條件的事件。工作流程可位於任何 Workflows 支援的位置,不一定要與觸發程序位於相同位置。不過,工作流程必須與觸發程序位於相同專案中。 -
DESTINATION_WORKFLOW_LOCATION
(選用):部署目的地工作流程的位置。如未指定,系統會假設工作流程與觸發程序位於相同位置。 - :Cloud Storage 事件的 ID,可以是下列其中一種:
google.cloud.storage.object.v1.finalized
:在值區中建立新物件 (或覆寫現有物件,並建立該物件的新產生版本) 時,系統會傳送這個事件google.cloud.storage.object.v1.archived
:當物件的使用中版本遭到封存或刪除時,系統會傳送事件。只有版本管理值區才會傳送這項事件。google.cloud.storage.object.v1.deleted
:永久刪除物件時,會傳送這個事件。視值區的物件版本管理設定而定,這表示:- 如果是啟用版本管理的值區,只有在永久刪除版本時才會傳送這個事件 (封存物件時不會傳送)。
- 如果值區未啟用版本管理功能,則系統在刪除或覆寫物件時,會傳送這個事件。
google.cloud.storage.object.v1.metadataUpdated
:現有物件的中繼資料變更時,系統會傳送這個事件。
EVENT_FILTER_TYPE
BUCKET
:Cloud Storage 值區的全域專屬 ID。-
SERVICE_ACCOUNT_NAME
:您建立的 IAM 服務帳戶名稱,並已授予 Workflows 所需的特定角色。 PROJECT_ID
:您的 Google Cloud 專案 ID
注意:
- 如果是來自 Cloud Storage的直接事件,事件酬載的編碼為
application/json
。 - 必須使用下列旗標:
--event-filters="type=EVENT_FILTER_TYPE"
--event-filters="bucket=BUCKET"
- 觸發條件一經建立即無法變更。
EVENT_FILTER_TYPE
如要使用其他事件類型,請建立新的觸發條件。 -
--service-account
: Eventarc 觸發條件將用來叫用工作流程執行的 IAM 服務帳戶電子郵件地址。強烈建議您使用僅具備必要權限的服務帳戶,存取所需資源。如要進一步瞭解服務帳戶,請參閱「建立及管理服務帳戶」。 - 系統會使用 Cloud Storage 的 Pub/Sub 通知傳送事件。
如果針對同一個 bucket 註冊過多通知,可能會超出 bucket 的通知上限 (如錯誤
Cloud Storage bucket ...: Pub/Sub notification limit reached
所示)。值區最多可以含有 10 項通知設定,在特定事件發生時觸發通知。如要查看更多配額和限制,請參閱 Cloud Storage 配額與限制頁面。 -
每個觸發條件可以有多個事件篩選器,以逗號分隔,並以一個
--event-filters
=[ATTRIBUTE
=VALUE
,...] 標記表示,也可以重複標記來新增更多篩選器。只有符合所有篩選條件的事件會傳送至目的地。不支援萬用字元和規則運算式。 - Cloud Storage 值區必須與 Eventarc 觸發程序位於相同 Google Cloud專案和區域或多區域。
- 根據預設,為 Eventarc 建立的 Pub/Sub 訂閱項目會持續存在,不會因活動而異,也不會過期。如要變更閒置時間長度,請參閱「訂閱屬性」。
範例:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-workflow=my-workflow \ --destination-workflow-location=europe-west4 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=my-project-bucket" \ --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
這項指令會為 Cloud Storage bucket my-project-bucket
建立名為 helloworld-trigger
的觸發條件,以及識別為 google.cloud.storage.object.v1.finalized
的事件。
Terraform
您可以使用 Terraform 建立工作流程的觸發條件。詳情請參閱「使用 Eventarc 和 Terraform 觸發工作流程」。
列出觸發條件
如要確認是否已建立觸發程序,請使用 Google Cloud CLI 或 Google Cloud 控制台列出 Eventarc 觸發程序。
主控台
在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。
這個頁面會列出所有位置的觸發條件,並包含名稱、區域、事件供應商、目的地等詳細資料。
如要篩選觸發條件,請按照下列步驟操作:
- 按一下「篩選器」 或「篩選器觸發條件」欄位。
- 在「屬性」清單中,選取要用來篩選觸發條件的選項。
您可以選取單一屬性,或使用邏輯運算子
OR
新增更多屬性。如要排序觸發條件,請按一下任何支援的欄標題旁的「排序」
。
gcloud
執行下列指令來列出觸發條件:
gcloud eventarc triggers list --location=-
這個指令會列出所有位置的觸發條件,並包含名稱、類型、目的地和狀態等詳細資料。