CloudEvents ํ˜•์‹ - HTTP ํ”„๋กœํ† ์ฝœ ๋ฐ”์ธ๋”ฉ

CloudEvents(cloudevents.io)๋Š” ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์–‘์ž…๋‹ˆ๋‹ค. ์ด ์‚ฌ์–‘์€ CNCF(Cloud Native Computing Foundation)์— ์†ํ•˜๋ฉฐ CNCF์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ž‘์—… ๊ทธ๋ฃน๋ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Eventarc๋Š” HTTP ์š”์ฒญ์„ ํ†ตํ•ด CloudEvents ํ˜•์‹์œผ๋กœ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

HTTP ์š”์ฒญ ํ—ค๋”

ํƒ€๊ฒŸ ์„œ๋น„์Šค๋Š” ์ด๋ฒคํŠธ ๋ผ์šฐํ„ฐ์˜ ์ด๋ฒคํŠธ๋ฅผ 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 ๊ฐ์‚ฌ ๋กœ๊ทธ

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: Google Cloud ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • MESSAGE_ID, PUBLISH_TIME, CONTENT_LENGTH: ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋ณธ๋ฌธ

ํŽ˜์ด๋กœ๋“œ๋Š” Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” JSON ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. protoPayload์—์„œ resourceName, serviceName, methodName ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ์˜ ์ด๋ฒคํŠธ ํ•„ํ„ฐ ํ™•์ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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_ID, PUBLISH_TIME, CONTENT_LENGTH: ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋ณธ๋ฌธ

ํŽ˜์ด๋กœ๋“œ๋Š” Pub/Sub ํ‘ธ์‹œ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. data ํ•„๋“œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ

๋ชจ๋“  ์ด๋ฒคํŠธ์˜ HTTP ๋ณธ๋ฌธ ๊ตฌ์กฐ๋Š” CloudEvents GitHub ์ €์žฅ์†Œ์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ์ €์žฅ์†Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ CloudEvents ๋ฐ์ดํ„ฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  • CloudEvents ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ์šฉ Google ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ
  • ์ƒ์„ฑ๋œ JSON ์Šคํ‚ค๋งˆ
  • ๊ณต๊ฐœ JSON ์Šคํ‚ค๋งˆ ์นดํƒˆ๋กœ๊ทธ

ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์ด๋ฒคํŠธ

ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ(๋˜๋Š” protobuf)๋Š” Eventarc์—์„œ ์ƒ์„ฑ๋˜๋Š” ์ด๋ฒคํŠธ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. CloudEvents์˜ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋Š” ๋จธ์‹  ํŒ๋… ๊ฐ€๋Šฅ ์Šคํ‚ค๋งˆ๋กœ ์ œ๊ณต๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋ชจ๋“  ํŠน์ • CloudEvent ์œ ํ˜•์—๋Š” 2๊ฐœ์˜ protobuf ๋ฉ”์‹œ์ง€๊ฐ€ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋‚˜๋Š” ํ™•์žฅ ์†์„ฑ์„ ํฌํ•จํ•˜์—ฌ ์ „์ฒด CloudEvent๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค(์˜ˆ: AuditLogWrittenEvent).
  • data ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค(์˜ˆ: LogEntryData ๋˜๋Š” StorageObjectData).
์—ฌ๋Ÿฌ CloudEvent ์œ ํ˜•์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Cloud Storage ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋Š” StorageObjectData๋ฅผ ๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€๋Š” proto ์ฃผ์„์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ CloudEvent ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ protobuf ๋ฉ”์‹œ์ง€์™€ CloudEvent ์œ ํ˜• ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ์ผ๋ถ€ ์ผ๋ฐ˜ ์ด๋ฒคํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ

Proto ํŒŒ์ผgoogle/events/cloud/audit/v1/events.proto
google/events/cloud/audit/v1/data.proto
๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€google.events.cloud.audit.v1.AuditLogWrittenEvent
๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€google.events.cloud.audit.v1.LogEntryData
์ด๋ฒคํŠธ ์œ ํ˜•
(๊ฐ์‚ฌ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ์ž‘์„ฑ๋  ๋•Œ)
google.cloud.audit.log.v1.written
์ด๋ฒคํŠธ ํ™•์žฅ
  • serviceName
  • methodName
  • resourceName
Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฒคํŠธ ์œ ํ˜• ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ Pub/Sub ๊ฐ์‚ฌ ๋กœ๊ทธ
BigQuery ๊ฐ์‚ฌ ๋กœ๊ทธ
์ถ”๊ฐ€ ์ •๋ณด Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ ์ด๋ฒคํŠธ์˜ Eventarc ํŠธ๋ฆฌ๊ฑฐ ๋งŒ๋“ค๊ธฐ
Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ์˜ ์ด๋ฒคํŠธ ํ•„ํ„ฐ ํ™•์ธ
๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ์žˆ๋Š”Google Cloud ์„œ๋น„์Šค

Cloud Storage

Proto ํŒŒ์ผ google/events/cloud/storage/v1/events.proto
google/events/cloud/storage/v1/data.proto
๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€google.events.cloud.storage.v1.ObjectFinalizedEvent
google.events.cloud.storage.v1.ObjectArchivedEvent
google.events.cloud.storage.v1.ObjectDeletedEvent
google.events.cloud.storage.v1.ObjectMetadataUpdatedEvent
๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€google.events.cloud.storage.v1.StorageObjectData
๋ฆฌ์†Œ์Šค Objects
์ด๋ฒคํŠธ ์œ ํ˜•
์ง์ ‘ ์ด๋ฒคํŠธ ์œ ํ˜• ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ˆ์‹œ ๋‹จ์ˆœ
๋ณต์žก
์ถ”๊ฐ€ ์ •๋ณด Cloud Storage ์ด๋ฒคํŠธ์˜ Eventarc ํŠธ๋ฆฌ๊ฑฐ ๋งŒ๋“ค๊ธฐ
Cloud Run ์„œ๋น„์Šค์˜ Cloud Storage์—์„œ ์ด๋ฒคํŠธ ์ˆ˜์‹ 

Firestore

Proto ํŒŒ์ผ google/events/cloud/firestore/v1/events.proto
google/events/cloud/firestore/v1/data.proto
๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€google.events.cloud.firestore.v1.DocumentCreatedEvent
google.events.cloud.firestore.v1.DocumentUpdatedEvent
google.events.cloud.firestore.v1.DocumentDeletedEvent
google.events.cloud.firestore.v1.DocumentWrittenEvent
๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€google.events.cloud.firestore.v1.DocumentEventData
๋ฆฌ์†Œ์Šค Document
์ด๋ฒคํŠธ ์œ ํ˜• ์ง์ ‘ ์ด๋ฒคํŠธ ์œ ํ˜• ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ˆ์‹œ ๋‹จ์ˆœ
๋ณต์žก
์ถ”๊ฐ€ ์ •๋ณด Firestore ์ด๋ฒคํŠธ์˜ Eventarc ํŠธ๋ฆฌ๊ฑฐ ๋งŒ๋“ค๊ธฐ
Eventarc ๋ฐ Firestore๋กœ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ ๋งŒ๋“ค๊ธฐ
Cloud Run ํ•จ์ˆ˜๋กœ ํ™•์žฅํ•˜์—ฌ Firestore์˜ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

Pub/Sub

Proto ํŒŒ์ผ google/events/cloud/pubsub/v1/events.proto
google/events/cloud/pubsub/v1/data.proto
๋ด‰ํˆฌ ๋ฉ”์‹œ์ง€google.events.cloud.pubsub.v1.MessagePublishedEvent
๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€google.events.cloud.pubsub.v1.MessagePublishedData
๋ฆฌ์†Œ์Šค PubsubMessage
์ด๋ฒคํŠธ ์œ ํ˜•
(Pub/Sub ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒŒ์‹œ๋  ๋•Œ)
google.cloud.pubsub.topic.v1.messagePublished
์˜ˆ ํ…์ŠคํŠธ
์ถ”๊ฐ€ ์ •๋ณด Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud Run ์„œ๋น„์Šค์—์„œ ์ด๋ฒคํŠธ ์ˆ˜์‹ 
Pub/Sub ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ํŠธ๋ฆฌ๊ฑฐ

๋‹ค์Œ ๋‹จ๊ณ„

์ด๋ฒคํŠธ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ