CloudEvents 形式

CloudEvents(cloudevents.io)は、イベントデータを一般的な方法で記述するための仕様です。この仕様は、Cloud Native Computing Foundation(CNCF)の Serverless Working Group によって編成されています。

Eventarc は、HTTP リクエストによって CloudEvents 形式で Cloud Run サービスにイベントを配信します。

HTTP リクエストの形式

Cloud Run サービスは、CloudEvents バージョン 1.0 HTTP プロトコル バインディング仕様の形式で HTTP POST リクエストとしてイベント ルーターからイベントを受信します。各 HTTP リクエストにはイベント固有のヘッダーと本文が含まれ、サービスのルート URL パス(/)に送信されます。

他の 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.cloud.audit.log.v1.written
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 の push メッセージです。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 Buffer
  • 生成された JSON スキーマ
  • 公開 JSON スキーマ カタログ

クライアント ライブラリへのリンクも含まれます。