Destinos de eventos frequentemente exigem uma estrutura de payload diferente do formato padrão CloudEvents 1.0 que o EventBridge usa internamente. A transformação de eventos remodela o payload antes de o EventBridge roteá-lo por um fluxo de eventos até o destino. Assim, é possível adequar os dados ao formato esperado sem escrever código adaptador.
Métodos de transformação
Quatro métodos determinam o que o destino recebe:
|
Método |
Comportamento |
Quando usar |
|
Evento completo |
Encaminha todo o payload CloudEvents sem alterações |
O destino aceita CloudEvents diretamente |
|
Evento parcial |
Extrai campos específicos com JSONPath |
O destino precisa apenas de um subconjunto do evento |
|
Constante |
Envia um valor fixo e ignora o conteúdo do evento |
O evento funciona como gatilho; seu payload é irrelevante |
|
Modelo |
Extrai campos para variáveis e compõe uma saída personalizada |
O destino exige uma estrutura de payload específica |
Todos os exemplos nesta página usam o seguinte evento de amostra como entrada:
{
"id": "7adc8c1a-645d-4476-bdef-5d6fb57f****",
"source": "acs.oss",
"specversion": "1.0",
"type": "oss:ObjectCreated:PostObject",
"datacontenttype": "application/json",
"dataschema": "http://example.com/test.json",
"subject": "acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg",
"time": "2020-08-17T16:04:46.149Asia/Shanghai",
"aliyuneventbusname": "demo-bus",
"aliyunregionid": "Shanghai",
"data": {
"name": "test",
"scope": 100
}
}
Evento completo
O método de evento completo encaminha todo o payload CloudEvents ao destino sem modificações.
Saída: Idêntica à entrada. Todos os campos do envelope CloudEvents e o payload data são preservados.
Evento parcial
O evento parcial usa uma expressão JSONPath para extrair campos específicos do payload CloudEvents e entrega apenas esses campos ao destino.
JSONPath: $.data
Saída:
{
"name": "test",
"scope": 100
}
Apenas o conteúdo correspondente é entregue. Os campos do envelope CloudEvents (id, source, type e outros) são removidos.
Constante
O método constante envia um valor fixo ao destino, independentemente do conteúdo do evento. O evento serve apenas como gatilho.
Valor constante:
{
"name": "test"
}
Saída:
{
"name": "test"
}
O conteúdo do evento é ignorado. O valor constante é enviado exatamente como definido.
Modelo
A transformação por modelo funciona em duas etapas:
Extrair -- Defina variáveis que obtêm valores do evento via JSONPath ou atribua strings fixas.
Compor -- Construa uma saída personalizada referenciando essas variáveis com a sintaxe
${variable}.
Esse método oferece controle total sobre o payload entregue.
Regras de variáveis
|
Restrição |
Detalhe |
|
Fontes de valor |
Expressão JSONPath (ex.: |
|
Aninhamento |
Não há suporte nas definições de variáveis |
Saída JSON com fontes mistas
Combine um campo extraído com uma mensagem fixa:
Variáveis:
{
"name": "$.data.name",
"constant": "Please deal with it timely."
}
Modelo:
{
"name": "${name}",
"constant": "${constant}"
}
Saída:
{
"name": "test",
"constant": "Please deal with it timely."
}
Saída em texto simples
Crie uma string de notificação a partir dos campos do evento:
Neste exemplo, o campo data do evento de entrada contém {"name": "test", "state": "RUNNING"}.
Variáveis:
{
"name": "$.data.name",
"state": "$.data.state"
}
Modelo:
The ${name} is in ${state} state.
Saída:
The test is in RUNNING state.
Funções de escape
Valores de variáveis com caracteres especiais podem corromper o formato de saída. Use as funções de escape integradas para tratá-los com segurança.
jsonEscape
Essa função aplica escape em caracteres especiais de strings JSON para evitar saídas malformadas. Use-a ao incorporar variáveis em campos de string JSON.
Variáveis:
{
"var": "\"abc\""
}
Modelo:
{
"text": "var is ${jsonEscape(var)}"
}
Saída:
{
"text": "var is \"abc\""
}
htmlEscape
Converte caracteres especiais HTML em suas entidades equivalentes para renderização como texto simples. Aplique essa função para prevenir injeção de scripts quando a saída contiver conteúdo gerado por usuários.
Variáveis:
{
"var": "<script>alert('unsafe');</script>"
}
Modelo:
<p>User Input: ${htmlEscape(var)}</p>
Saída:
<p>User Input: <script>alert('unsafe');</script></p>
Problemas comuns
|
Problema |
Causa |
Solução |
|
Variável não substituída na saída |
A expressão JSONPath não corresponde a nenhum campo no evento |
Verifique o JSONPath em relação à estrutura real do evento. Se o caminho não corresponder, a variável não será criada e aparecerá como a string literal |
|
Saída JSON malformada |
O valor da variável contém caracteres especiais (aspas, barras invertidas) |
Envolva a referência da variável com |
|
Injeção de HTML na saída |
O valor da variável contém tags HTML |
Envolva a referência da variável com |
|
Saída do modelo truncada |
O valor da variável excede o comprimento máximo |
Reduza o valor da variável ou divida o payload em múltiplas variáveis. |
Veja também
Transformação de eventos (regras de evento)
Especificação CloudEvents 1.0