CloudEvents

CloudEvents je otevřená specifikace pro popis dat událostí (events) v běžných formátech. Cílem je poskytnout konzistentní způsob, jakým různé systémy (cloudoví poskytovatelé, SaaS platformy, lokální aplikace) definují metadata událostí, čímž se zjednodušuje deklarace a doručování událostí napříč platformami.

Projekt spadá pod organizaci Cloud Native Computing Foundation (CNCF).

Problém, který CloudEvents řeší

V architektuře řízené událostmi (EDA) generuje každý systém události v jiném formátu. Například:

AWS S3 událost vypadá jinak než událost z Azure Blob Storage.

Webhook z GitHubu má jinou strukturu než webhook ze Stripe.

To nutí vývojáře psát specifický kód pro parsování každého typu zdroje. CloudEvents tento chaos sjednocuje definováním standardní „obálky“ (envelope) kolem dat události.

Struktura CloudEvents

Specifikace definuje sadu povinných a volitelných polí, která musí každá událost obsahovat, bez ohledu na to, co je jejím obsahem (payload).

Povinné atributy (Required)

id: Unikátní identifikátor události.

source: Identifikátor kontextu, kde k události došlo (např. URL služby).

specversion: Verze specifikace CloudEvents (aktuálně 1.0).

type: Typ události (např. com.github.pull_request.opened).

Volitelné atributy (Optional)

datacontenttype: Formát dat (např. application/json).

subject: Další podrobnosti o předmětu události (např. ID konkrétního souboru).

time: Čas vzniku události v ISO 8601.

data: Samotný obsah události (payload).

Příklady serializace

CloudEvents podporují různé formáty zápisu, nejčastěji JSON.

Příklad v JSON:

{
"specversion" : "1.0",
"type" : "com.priklad.vytvoreni_objednavky",
"source" : "/eshop/objednavky",
"id" : "A234-1234-1234",
"time" : "2026-01-03T15:00:00Z",
"datacontenttype" : "application/json",
"data" : {
"zakaznik_id" : "8899",
"castka" : 1250.50
}
}

Protokoly a přenos

CloudEvents nejsou vázány na jeden přenosový protokol. Specifikace definuje, jak se události mapují na různé protokoly (Protocol Bindings):

HTTP: Událost může být poslána jako tělo POST požadavku, nebo mohou být metadata uložena v HTTP hlavičkách (tzv. Binary Mode).

MQTT: Pro IoT zařízení.

AMQP / Kafka: Pro pokročilé systémy zasílání zpráv.

Význam pro Serverless a PaaS

V prostředí Serverless hrají CloudEvents klíčovou roli:

1. **Nezávislost na cloudu (Cloud Agnostic):** Umožňují snadnější migraci funkcí mezi AWS Lambda, Google Cloud Functions a Azure Functions.
2. **Ekosystém nástrojů:** Existují knihovny pro většinu jazyků (Java, Go, Python, JavaScript), které automaticky validují a parsují standardizované události.
3. **Event Mesh:** Umožňuje vytvářet komplexní sítě, kde událost z jednoho cloudu vyvolá akci v cloudu jiném.

— Související termíny: Serverless, FaaS, JSON, Middleware, Webhook.