CloudEvents 格式

CloudEvents (cloudevents.io) 是一种以通用方式描述事件数据的规范。该规范属于 Cloud Native Computing Foundation (CNCF),并由 CNCF 的无服务器工作组整理。

Eventarc 通过 HTTP 请求将 CloudEvents 格式的事件传送到 Cloud Run 服务。

HTTP 请求格式

Cloud Run 服务从事件路由器以采用 CloudEvents 1.0 版 HTTP 协议绑定规范格式的 HTTP POST 请求的形式接收事件。每个 HTTP 请求都包含特定于事件的标头和正文,并发送到服务的根网址路径 (/)。

除其他 HTTP 标头外,所有事件还具有以下 CloudEvents HTTP 标头:

标题 说明 示例
ce-id 事件的唯一标识符 1096434104173400
ce-source 标识事件的来源 //pubsub.googleapis.com/projects/my-project/topics/my-topic
ce-specversion 此事件使用的 CloudEvents 规范版本 1.0
ce-type 事件数据的类型 google.cloud.pubsub.topic.v1.messagePublished
ce-time 事件生成时间,采用 RFC 3339 格式(可选) 2020-12-20T13:37:33.647Z

HTTP 载荷格式

Cloud Audit Logs

google.cloud.audit.log.v1.written 类型的事件具有以下格式:

标头

ce-specversion: 1.0
ce-type: google.events.cloud.audit.v1.LogEntryData
ce-source: //SERVICE_NAME/projects/PROJECT_ID
ce-id: MESSAGE_ID
ce-time: PUBLISH_TIME
Content-Type: application/json; charset=utf-8
Content-Length: CONTENT_LENGTH
  • SERVICE_NAME:发出事件的服务的 Google API URI;例如,来自 BigQuery 的事件为 bigquery.googleapis.com
  • PROJECT_ID:您的 GCP 项目 ID。
  • MESSAGE_IDPUBLISH_TIMECONTENT_LENGTH:系统生成。

正文

载荷是详细说明 Cloud Audit Logs 事件的 JSON 对象。在 protoPayload 中,您可以找到 resourceNameserviceNamemethodName 值。以下是来自 Cloud Storage 的审核日志示例:

{
  "protoPayload": {
    "status": {},
    "authenticationInfo": { ... },
    "requestMetadata": {
      "callerIp": "...",
      "callerSuppliedUserAgent": "...",
      "requestAttributes": {
        "time": "YYYY-MM-DDThh:mm:ss.sZ",
        "auth": {}
      },
      "destinationAttributes": {}
    },
    "serviceName": "storage.googleapis.com",
    "methodName": "storage.objects.create",
    "authorizationInfo": [
      {
        "resource": "projects/_/buckets/MY_BUCKET/objects/MY_FILE.txt",
        "permission": "storage.objects.create",
        "granted": true,
        "resourceAttributes": {}
      },
      {
        "resource": "projects/_/buckets/MY_BUCKET/objects/MY_FILE.txt",
        "permission": "storage.objects.delete",
        "granted": true,
        "resourceAttributes": {}
      }
    ],
    "resourceName": "projects/_/buckets/MY_PROJECT/objects/MY_FILE.txt",
    "serviceData": {
      "policyDelta": {
        "bindingDeltas": [ ... ]
      },
      "@type": "type.googleapis.com/google.iam.v1.logging.AuditData"
    },
    "resourceLocation": {
      "currentLocations": [
        "us-central1"
      ]
    }
  },
  "insertId": "-qklu1af11306y",
  "resource": {
    "type": "gcs_bucket",
    "labels": {
      "location": "us-central1",
      "bucket_name": "MY_BUCKET",
      "project_id": "MY_PROJECT"
    }
  },
  "timestamp": "2021-04-09T17:57:16.718915757Z",
  "severity": "INFO",
  "logName": "projects/MY_PROJECT/logs/cloudaudit.googleapis.com%2Fdata_access",
  "receiveTimestamp": "2021-04-09T17:57:17.748555474Z"
}

Pub/Sub

google.cloud.pubsub.topic.v1.messagePublished 类型的事件具有以下格式:

标头

ce-specversion: 1.0
ce-type: google.cloud.pubsub.topic.v1.messagePublished
ce-source: //pubsub.googleapis.com/TOPIC
ce-id: MESSAGE_ID
ce-time: PUBLISH_TIME
Content-Type: application/json; charset=utf-8
Content-Length: CONTENT_LENGTH
  • TOPIC:事件发布到的 Pub/Sub 主题。
  • MESSAGE_IDPUBLISH_TIMECONTENT_LENGTH:系统生成。

正文

载荷是 Pub/Sub 推送消息。在 data 字段中,您可以找到以 Base64 编码的字符串形式的消息。

{
   "message": {
     "attributes": {
       "key": "value"
     },
     "data": "SGVsbG8gV29ybGQK",
     "messageId": "136969346945",
     "publishTime": "2021-10-02T15:01:23.045123456Z"
   },
   "subscription": "projects/MY_PROJECT/subscriptions/MY_SUBSCRIPTION"
}

开源

所有事件的 HTTP 正文结构都位于 CloudEvents GitHub 代码库中。

该代码库包含以下内容,帮助您了解和使用采用您的编程语言的 CloudEvents 数据:

  • 用于 CloudEvents 数据载荷的 Google Protocol Buffers
  • 生成的 JSON 架构
  • 公开 JSON 架构目录

还包含指向客户端库的链接。