事件總線EventBridge支持事件內容轉換,即將事件源發出的符合CloudEvents 1.0協議的事件轉換為事件目標可以接收的格式。本文介紹事件總線EventBridge提供的事件轉換類型。
事件總線EventBridge支持的事件內容轉換類型如下:
完整事件
當轉化類型為完整事件時,事件總線EventBridge不對事件進行轉換,將事件的完整結構路由到事件目標。
下表介紹經過完整事件轉換前后的事件示例。
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| | {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
部分事件
當轉換類型為部分事件時,事件總線EventBridge通過JSONPath從符合CloudEvents格式的事件中提取事件中的參數,將指定的事件內容路由到事件目標。
下表介紹經過部分事件轉換前后的事件示例。
示例一:轉換成字符串
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| $.data.value
| test1
|
示例二:轉換成JSON格式
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| $.data
| {
"key": "test2",
"value": "test1"
}
|
固定值
當轉換類型為常量時,事件只起到觸發器的作用,不管事件內容是什么,事件總線EventBridge都把常量路由到事件目標。
下表介紹經過常量轉換前后的事件示例。
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| ctyun
| ctyun
|
模板
當轉換類型為模板時,通過自定義模板、定義模板里需要的變量,事件總線EventBridge通過JSONPath從事件中提取參數,把這些值存放在變量中,然后按照模板定義的格式路由到事件目標。
下表介紹經過模板轉換前后的事件示例。
說明 1:當轉換類型為模板時,模板的變量值既可以是一個JSONPath,也可以是一個字符串常量。
2:模板的變量值不支持嵌套多層結構。
示例一:轉換成簡單字符串
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| 模板 {
"value": "$.data.value"
}
value is ${value}
| value is test1
|
示例二:通過模板轉換成JSON
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| 模板 {
"value": "$.data.value"
}
{
"value": "${value}"
}
| {
"value": "test1"
}
|
示例三:轉換時變量為JSON形式
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| 模板 {
"data": "$.data"
}
{
"value": ${data}
}
| {
"value": {
"key": "test2",
"value": "test1"
}
}
|
示例四:轉換時變量進行JSON轉義
若希望轉換的字符串保持JSON字符串格式,不破壞原有JSON的格式,可使用jsonEscape函數,如下所示:
轉換前的事件 | 轉換類型 | 轉換后的事件 |
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json;charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| 模板 {
"data": "$.data"
}
{
"value": "${jsonEscape(data)}"
}
| {
"value": "{\"key\": \"test2\",\"value\": \"test1\"}"
}
|
空
當轉換類型為空時,事件總線EventBridge將事件路由到事件目標時,對應的屬性為空。如希望分布式消息服務Kafka事件目標的Key、分布式消息服務RocketMQ事件目標的Tags為空時,可以將對應屬性設置為空。