直接發布事件

您可以使用 Google Cloud CLI,或向 Eventarc Publishing REST API 發出要求,以支援的格式將 CloudEvents 事件直接發布至 Eventarc Advanced 匯流排。您也可以使用 Eventarc 用戶端程式庫,透過支援的語言存取 Eventarc API。

事前準備

開始之前,請確認您已完成下列步驟:

  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. 啟用 Eventarc 和 Eventarc Publishing API:

    啟用 API 時所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. 安裝 Google Cloud CLI。

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

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

    gcloud init
  11. 建立或選取 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 專案名稱。

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

  13. 啟用 Eventarc 和 Eventarc Publishing API:

    啟用 API 時所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com

直接發布

您直接發布的事件訊息必須符合 CloudEvents 規格

gcloud

  1. 開啟終端機。

  2. 您可以使用 gcloud eventarc message-buses publish 指令,將事件發布至匯流排。例如:

    gcloud eventarc message-buses publish BUS_NAME \
        --avro-message=AVRO_MESSAGE
    或:
    gcloud eventarc message-buses publish BUS_NAME \
        --json-message=JSON_MESSAGE
    或:
    gcloud eventarc message-buses publish BUS_NAME \
        --event-data=DATA_PAYLOAD \
        --event-id=EVENT_ID \
        --event-source=EVENT_SOURCE \
        --event-type=EVENT_TYPE \
        --event-attributes=EVENT_ATTRIBUTE

    更改下列內容:

    • BUS_NAME:要發布事件的匯流排 ID 或完整 ID。

    您只能使用下列其中一種方法:

    • AVRO_MESSAGE:Avro 格式的事件訊息,請參閱這份規格
    • JSON_MESSAGE:JSON 格式的事件訊息,請參閱這份規格
    • DATA_PAYLOAD:已發布事件的資料。

    如果使用 --event-data 旗標,也必須使用下列項目:

    • EVENT_ID:事件 ID。事件產生者必須確保每個不同事件的 source + id 都不重複。
    • EVENT_SOURCE:已發布事件的事件來源。
    • EVENT_TYPE:與原始事件相關的事件類型。

    使用 --event-data 標記時,您可以視需要使用下列項目:

    • EVENT_ATTRIBUTE:已發布事件的屬性。如要新增更多屬性,可以重複使用 --event-attributes 標記。

      請注意,事件可能包含任意數量的其他自訂 CloudEvents 屬性,且名稱各不相同 (也稱為擴充屬性)。

範例:

gcloud eventarc message-buses publish my-bus \
    --event-data='{"key": "hello-world-data"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json"

gcloud eventarc message-buses publish my-bus --json-message='{
    "specversion" : "1.0",
    "type" :"com.example.someevent",
    "source" : "google.cloud.storage.object.v1.finalized",
    "id" : "A234-1234-1234",
    "time" : "2024-04-05T17:31:00Z",
    "bucket" : "bucketName",
    "datacontenttype" : "application/json",
    "data":{"key": "value"}
}'

REST API

如要將事件發布至匯流排,請使用 projects.locations.messageBuses.publish 方法。

使用任何要求資料之前,請先修改下列項目的值:

  • 匯流排的完整資源名稱,格式為 projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    更改下列內容:

    • PROJECT_ID:公車專案的 Google Cloud 專案 ID。
    • LOCATION:匯流排部署所在的區域,例如 us-central1
    • BUS_NAME:要發布事件的匯流排名稱。
  • SPEC_VERSION:事件使用的 CloudEvents 規格版本,例如 1.0
  • EVENT_TYPE:與原始事件相關的事件類型。
  • EVENT_SOURCE:已發布事件的事件來源。
  • EVENT_ID:事件 ID。 製作者必須確保每個不同活動的 source + id 皆不重複。
  • CONTENT_TYPE (選用):data 值的內容類型。如果 JSON 格式的事件沒有 datacontenttype 屬性,系統會假設資料是符合 application/json 媒體類型的 JSON 值。
  • DATA_PAYLOAD (選用):事件酬載,已編碼為 datacontenttype 指定的媒體格式,並遵守 dataschema (如有這些屬性)。

JSON 要求內文:

{
"jsonMessage":
  "{\"specversion\":\"SPEC_VERSION\",
  \"type\":\"EVENT_TYPE\",
  \"source\":\"EVENT_SOURCE\",
  \"id\":\"EVENT_ID\",
  \"datacontenttype\":\"CONTENT_TYPE\",
  \"data\":\"DATA_PAYLOAD\"}"
}

請展開以下其中一個選項,以傳送要求:

如果成功,伺服器會傳回 HTTP 200 OK 狀態碼,以及 JSON 格式的空白回應主體:

200 OK

{}

後續步驟