O EventBridge usa padrões de eventos para filtrar e rotear eventos aos destinos. Um padrão de evento é um módulo do EventBridge que define critérios de correspondência: apenas eventos cuja estrutura e valores coincidam com o padrão são entregues ao destino. Os padrões de eventos devem ter a mesma estrutura dos eventos correspondentes.
Como funciona a correspondência
O EventBridge avalia cada evento recebido em relação ao seu padrão seguindo estas regras:
|
Regra |
Descrição |
|
Correspondência estrutural |
O evento deve conter todos os campos do padrão, com aninhamento idêntico. |
|
Comparação sensível a maiúsculas e minúsculas |
Os caracteres são comparados exatamente como estão. O EventBridge não normaliza nem modifique strings durante a correspondência. |
|
Apenas valores JSON |
Os valores do evento devem ser JSON válido: strings entre aspas duplas, números sem aspas ou as palavras-chave |
|
AND entre chaves, OR dentro de arrays |
Múltiplas chaves em um padrão usam lógica AND. Múltiplos valores no array de uma única chave usam lógica OR. |
Referência de operadores
Consulte a tabela abaixo para encontrar o operador adequado às suas necessidades de filtragem. A sintaxe detalhada e os exemplos estão disponíveis em cada seção subsequente.
|
Operador |
Função |
Exemplo de sintaxe |
|
Corresponde a um valor de campo específico |
|
|
|
Corresponde ao início de uma string |
|
|
|
Corresponde ao final de uma string |
|
|
|
Corresponde a uma substring dentro de um valor |
|
|
|
Exclui valores específicos |
|
|
|
Corresponde a um número ou intervalo numérico |
|
|
|
Corresponde a um intervalo de endereços IPv4 |
|
|
|
Verifica se um campo existe |
|
|
|
Corresponde a valores null ou |
|
|
|
Corresponde a qualquer valor em um array |
|
|
|
Combina múltiplos operadores |
Consulte Correspondência combinada |
Correspondência de valor exato
Para corresponder a eventos em que um campo seja igual a um valor específico, coloque o valor dentro de um array.
Padrão:
{
"source": ["acs.oss"]
}
Este padrão corresponde a eventos onde source é "acs.oss". Eventos com um source diferente, como "acs.ecs" ou "acs.imm", não correspondem.
Exemplo — O seguinte evento do OSS corresponde porque source é "acs.oss":
{
"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",
"data": {
"name": "test",
"scope": 100
}
}
Eventos com um source diferente não correspondem:
Um evento com
"source": "acs.ecs"(Elastic Compute Service)Um evento com
"source": "acs.imm"(Intelligent Media Management)
Correspondência por prefixo
Use o operador prefix para corresponder a eventos cujo valor de campo comece com uma string específica.
Padrão:
{
"source": [{"prefix": "acs."}]
}
Esse padrão corresponde a eventos onde source começa com "acs.", como "acs.oss" e "acs.imm".
Correspondência por sufixo
Utilize o operador suffix para corresponder a eventos cujo valor de campo termine com uma string específica.
Combine prefix e suffix no mesmo array para aplicar ambas as condições. Múltiplas entradas de sufixo usam lógica OR: o evento corresponde se qualquer sufixo for compatível.
Padrão:
{
"subject": [
{"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"},
{"suffix": ".txt"},
{"suffix": ".jpg"}
]
}
Este padrão corresponde a eventos onde subject começa com o prefixo de caminho OSS especificado E termina com .txt ou .jpg. Um evento com subject terminando em .png não corresponde.
Correspondência por conteúdo
Aplique o operador contains para corresponder a eventos cujo valor de campo contenha uma substring específica.
Substring única:
{
"type": [{"contains": "Normal"}]
}
Corresponde a eventos como "type": "UserNormalEvent". Não corresponde a "type": "UserErrorEvent".
Múltiplas substrings (lógica OR):
{
"type": [
{"contains": "Normal"},
{"contains": "Error"}
]
}
Corresponde a eventos onde type contém "Normal" ou "Error". Tanto "UserNormalEvent" quanto "UserErrorEvent" correspondem. Já "UserOtherEvent" não corresponde.
Correspondência anything-but
Para excluir eventos que correspondam a valores específicos, utilize o operador anything-but. Eventos com qualquer outro valor para o campo especificado serão aceitos.
Excluir uma única string
{
"data": {
"state": [{"anything-but": "initializing"}]
}
}
Corresponde a eventos onde data.state é qualquer valor exceto "initializing". Por exemplo, "state": "running" corresponde.
Excluir um único número
{
"data": {
"x-limit": [{"anything-but": 123}]
}
}
Corresponde a eventos onde data.x-limit é qualquer valor exceto 123. Por exemplo, "x-limit": 456 corresponde.
Excluir múltiplas strings
{
"data": {
"state": [{"anything-but": ["stopped", "overloaded"]}]
}
}
Corresponde a eventos onde data.state é qualquer valor exceto "stopped" ou "overloaded". Por exemplo, "state": "terminated" corresponde.
Excluir múltiplos números
{
"data": {
"x-limit": [{"anything-but": [100, 200, 300]}]
}
}
Corresponde a eventos onde data.x-limit é qualquer valor exceto 100, 200 ou 300. Por exemplo, "x-limit": 456 corresponde.
Excluir por prefixo
{
"data": {
"state": [{"anything-but": {"prefix": "init"}}]
}
}
Corresponde a eventos onde data.state não começa com "init". Por exemplo, "state": "pending" corresponde, mas "state": "initializing" não corresponde.
Excluir uma source de evento específica
{
"source": [{"anything-but": ["acs.ecs"]}]
}
Corresponde a eventos de qualquer source, exceto "acs.ecs". Por exemplo, eventos de "acs.oss" correspondem.
Excluir todos os eventos de service da Alibaba Cloud
{
"source": [{"anything-but": {"prefix": "acs."}}]
}
Corresponde apenas a eventos de sources personalizadas (não Alibaba Cloud). Qualquer evento com source começando com "acs." é excluído.
Correspondência numérica
Para corresponder a eventos com base em valores numéricos ou intervalos, use o operador numeric com um ou mais operadores de comparação.
|
Operador de comparação |
Descrição |
|
|
Igual a |
|
|
Maior que |
|
|
Maior ou igual a |
|
|
Menor que |
|
|
Menor ou igual a |
Defina um intervalo colocando dois operadores no mesmo array.
Condição única:
{
"data": {
"d-count": [{"numeric": ["<", 10]}]
}
}
Corresponde a eventos onde data.d-count é menor que 10.
Condição de intervalo:
{
"data": {
"c-count": [{"numeric": [">", 0, "<=", 5]}]
}
}
Corresponde a eventos onde data.c-count é maior que 0 e menor ou igual a 5.
Valor numérico exato:
{
"data": {
"x-limit": [{"numeric": ["=", 301.8]}]
}
}
Corresponde a eventos onde data.x-limit é igual a 301.8. Um evento com "x-limit": 300 não corresponde.
Múltiplas condições numéricas em diferentes campos:
{
"data": {
"c-count": [{"numeric": [">", 0, "<=", 5]}],
"d-count": [{"numeric": ["<", 10]}],
"x-limit": [{"numeric": ["=", 301.8]}]
}
}
Todas as três condições devem ser verdadeiras (lógica AND entre chaves).
A correspondência numérica funciona apenas com números formatados em JSON no intervalo de -1,0e9 a +1,0e9, com precisão de até 15 dígitos e 6 casas decimais.
Correspondência de endereço IP
Para corresponder a eventos com base em um endereço IPv4 ou bloco CIDR, use o operador cidr em um campo do objeto data.
Padrão:
{
"data": {
"source-ip": [{"cidr": "10.0.0.0/24"}]
}
}
Corresponde a eventos onde data.source-ip está dentro do intervalo 10.0.0.0/24. Por exemplo, "source-ip": "10.0.0.123" corresponde, mas "source-ip": "192.168.0.123" não corresponde.
Apenas endereços IPv4 são suportados.
Correspondência combinada
Combine múltiplos operadores em um único padrão para obter uma filtragem precisa. Condições em campos diferentes usam lógica AND: todas as condições devem ser verdadeiras para que o evento corresponda.
O padrão a seguir combina os operadores prefixo, anything-but, CIDR e numérico:
{
"source": [{"prefix": "acs."}],
"data": {
"state": [{"anything-but": "initializing"}],
"source-ip": [{"cidr": "10.0.0.0/24"}],
"c-count": [{"numeric": [">", 0, "<=", 5]}],
"d-count": [{"numeric": ["<", 10]}],
"x-limit": [{"anything-but": [100, 200, 300]}]
}
}
Este evento corresponde apenas quando todas as condições são verdadeiras:
sourcecomeça com"acs."data.statenão é"initializing"data.source-ipestá no intervalo10.0.0.0/24data.c-counté maior que0e no máximo5data.d-counté menor que10data.x-limitnão é100,200ou300
Exemplo de correspondência:
Um evento com source: "acs.oss", state: "pending", source-ip: "10.0.0.123", c-count: 5, d-count: 7 e x-limit: 301.8 satisfaz todas as condições.
Exemplo de não correspondência:
Um evento com state: "initializing" e source-ip: "192.168.0.123" falha nas condições anything-but e CIDR.
Correspondência de array
Quando um campo do padrão lista múltiplos valores em um array, o evento corresponde se o valor do seu campo for igual a qualquer valor desse array. Se o próprio campo do evento for um array, a correspondência ocorre quando os dois arrays compartilham pelo menos um elemento comum.
Valor único no evento, múltiplos valores no padrão:
{
"subject": [
"acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg",
"acs:oss:cn-hangzhou:1112223:xls-papk/game_apk/123.jpg",
"acs:oss:cn-hangzhou:4455667:xls-papk/game_apk/123.jpg"
]
}
Corresponde se o subject do evento for igual a qualquer um dos três valores.
Valor de array no evento:
Se o evento contiver "subject": ["acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg", "acs.ecs:cn-hangzhou:123456789098****:215672"], ele corresponde porque o primeiro elemento aparece tanto no array do padrão quanto no array do evento.
Correspondência de null e string vazia
Para corresponder a eventos onde um campo é null ou uma string vazia "", coloque o valor alvo dentro de um array.
Corresponder a uma string vazia:
{
"data": {
"eventVersion": [""]
}
}
Corresponde a eventos onde data.eventVersion é "". Não corresponde se o valor for "1.0".
Corresponder a um valor null:
{
"data": {
"responseElements": [null]
}
}
Corresponde a eventos onde data.responseElements é null. Não corresponde se o valor for "lss" ou qualquer outro valor não null.
Null e string vazia são valores distintos. Um padrão que corresponde a "" não corresponde a null, e vice-versa.
Correspondência de existência de campo
Para corresponder a eventos com base na existência de um campo no objeto data, utilize o operador exists.
Corresponder quando um campo não existe:
{
"data": {
"state": [{"exists": false}]
}
}
Corresponde a eventos onde o objeto data não contém um campo state. Se state estiver presente com qualquer valor (incluindo null), o evento não corresponde.
Corresponder quando um campo existe:
{
"data": {
"state": [{"exists": true}]
}
}
Corresponde a eventos onde o objeto data contém um campo state, independentemente do seu valor.