====== 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 ([[event_driven_architecture|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|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|Serverless]], [[faas|FaaS]], [[json|JSON]], [[middleware|Middleware]], [[webhook|Webhook]].