As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Filtragem de conteúdo nos padrões de EventBridge eventos da Amazon
A Amazon EventBridge oferece suporte à filtragem declarativa de conteúdo usando padrões de eventos. Com a filtragem de conteúdo, é possível escrever padrões de eventos complexos que só são acionados sob condições muito específicas. Por exemplo, é possível criar um padrão de evento que corresponda a um evento quando:
-
Um campo do evento está dentro de um intervalo numérico específico.
-
O evento vem de um endereço IP específico.
-
Não existe um campo específico no JSON do evento.
Importante
Em EventBridge, é possível criar regras que podem gerar higher-than-expected cobranças e estrangulamentos. Por exemplo, é possível criar, por engano, uma regra que leva a um loop infinito, em que uma regra é acionada recursivamente sem fim. Supõe-se que uma regra possa detectar que as ACLs foram alteradas em um bucket do Amazon S3 e acionar o software para alterá-las para o estado desejado. Se a regra não for gravada cuidadosamente, a alteração subsequente às ACLs disparará a regra novamente, criando um loop infinito.
Para obter orientação sobre como escrever regras precisas e padrões de eventos para minimizar esses resultados inesperados, consulte Práticas recomendadas ao definir regras do Amazon EventBridge e Melhores práticas ao definir padrões de EventBridge eventos da Amazon.
Tipos de filtro
- Correspondência de prefixo
- Correspondência de sufixo
- Correspondência anything-but
- Correspondência numérica
- Correspondência de endereço IP
- Existe correspondência
- quals-ignore-caseCombinação E
- Como corresponder usando curingas
- Exemplo complexo com várias correspondências
- Exemplo complexo com correspondências de $or
Correspondência de prefixo
É possível fazer uma correspondência de um evento com um valor na origem do evento no prefixo. É possível usar a correspondência de prefixos para valores de string.
Por exemplo, haveria correspondência do padrão de evento a seguir em qualquer evento em que o campo "time"
começasse com "2017-10-02"
, como "time": "2017-10-02T18:43:48Z"
.
{
"time": [ { "prefix": "2017-10-02" } ]
}
Correspondência de prefixo ao ignorar maiúsculas e minús
Você também pode combinar um valor de prefixo, independentemente da maiúscula dos caracteres com os quais um valor começa, usando equals-ignore-case
em conjunto com prefix.
Por exemplo, o padrão de evento a seguir corresponderia a qualquer evento em que o service
campo começasse com a cadeia de caracteresEventB
, mas também com EVENTB
eventb
,, ou com qualquer outra capitalização desses caracteres.
{
"detail": {"service" : [{ "prefix": { "equals-ignore-case": "EventB" }}]}
}
Correspondência de sufixo
É possível combinar um evento dependendo do sufixo de um valor na origem do evento. É possível usar a correspondência de sufixos para valores de string.
Por exemplo, haveria correspondência do padrão de evento a seguir em qualquer evento em que o campo "FileName"
terminasse com a extensão de arquivo .png
.
{
"FileName": [ { "suffix": ".png" } ]
}
Correspondência de sufixos ao ignorar maiúsculas e min
Você também pode combinar um valor de sufixo, independentemente da maiúscula dos caracteres com os quais um valor termina, usando equals-ignore-case
em conjunto com suffix.
Por exemplo, o padrão de evento a seguir corresponderia a qualquer evento em que o FileName
campo terminasse com a cadeia de caracteres.png
, mas também .PNG
a qualquer outra capitalização desses caracteres.
{
"detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]}
}
Correspondência anything-but
Qualquer coisa, exceto a correspondência, corresponde a qualquer coisa, exceto o que está especificado na regra.
É possível excluir correspondências com strings e valores numéricos, incluindo listas que contenham somente strings ou números.
O evento a seguir mostra tudo menos uma correspondência com uma lista de strings e números.
{
"detail": {
"state": [ { "anything-but": "initializing" } ]
}
}
{
"detail": {
"x-limit": [ { "anything-but": 123 } ]
}
}
O evento a seguir mostra tudo menos uma correspondência com uma lista de strings.
{
"detail": {
"state": [ { "anything-but": [ "stopped", "overloaded" ] } ]
}
}
O evento a seguir mostra tudo menos uma correspondência com uma lista de números.
{
"detail": {
"x-limit": [ { "anything-but": [ 100, 200, 300 ] } ]
}
}
Tudo menos combinar, ignorando maiúsculas e minúsculas
Você também pode usar equals-ignore-case
em conjunto comanything-but
, para combinar valores de string, independentemente da maiúscula dos caracteres.
O padrão de evento a seguir corresponde aos state
campos que não contêm a string “initializing”, “INITIALIZING”, “Initializing” ou qualquer outra capitalização desses caracteres.
{
"detail": {"state" : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}
}
Você também pode usar equals-ignore-case
em conjunto com anything-but
para comparar com uma lista de valores:
{
"detail": {"state" : [{ "anything-but": { "equals-ignore-case": ["initializing", "stopped"] }}]}
}
Tudo menos correspondência em prefixos
Você pode usar prefix
em conjunto com anything-but
para combinar valores de string que não começam com o valor especificado. Isso inclui valores únicos ou uma lista de valores.
O padrão de evento a seguir mostra tudo, exceto a correspondência, que corresponde a qualquer evento que não tenha o prefixo "init"
no campo. "state"
{
"detail": {
"state": [ { "anything-but": { "prefix": "init" } } ]
}
}
O padrão de eventos a seguir mostra tudo menos a correspondência usada com uma lista de valores de prefixo. Esse padrão de evento corresponde a qualquer evento que não tenha o prefixo "init"
nem o "stop"
"state"
campo.
{
"detail": {
"state" : [{ "anything-but": { "prefix": ["init", "stop"] } } ] }
}
}
Tudo menos correspondência em sufixos
Você pode usar suffix
em conjunto com anything-but
para combinar valores de string que não terminam com o valor especificado. Isso inclui valores únicos ou uma lista de valores.
O padrão de evento a seguir corresponde a todos os valores do FileName
campo que não terminam com.txt
.
{
"detail": {
"FileName": [ { "anything-but": { "suffix": ".txt" } } ]
}
}
O padrão de evento a seguir mostra tudo menos a correspondência usada com uma lista de valores de sufixo. Esse padrão de evento corresponde a todos os valores do FileName
campo que não terminam com .txt
ou.rtf
.
{
"detail": {
"FileName": [ { "anything-but": { "suffix": [".txt", ".rtf"] } } ]
}
}
Tudo menos combinar usando curingas
Você pode usar o caractere curinga (*) nos valores especificados para qualquer coisa, exceto a correspondência. Isso inclui valores únicos ou uma lista de valores.
O padrão de evento a seguir corresponde a todos os valores do FileName
campo que não contêm/lib/
.
{
"detail": {
"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]
}
}
O padrão de eventos a seguir mostra tudo menos a correspondência usada com uma lista de valores, incluindo curingas. Esse padrão de evento corresponde a todos os valores do FileName
campo que não contêm /lib/
nem/bin/
.
{
"detail": {
"FilePath" : [{ "anything-but": { "wildcard": ["*/lib/*", "*/bin/*"] }}]
}
}
Para ter mais informações, consulte Como corresponder usando curingas.
Correspondência numérica
A correspondência numérica funciona com valores que são números JSON. Está limitada a valores entre -5.0e9 e +5.0e9 inclusive, com 15 dígitos de precisão ou seis dígitos à direita do ponto decimal.
O exemplo a seguir mostra a correspondência numérica para um padrão de evento que corresponde somente aos eventos que são verdadeiros para todos os campos.
{
"detail": {
"c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ],
"d-count": [ { "numeric": [ "<", 10 ] } ],
"x-limit": [ { "numeric": [ "=", 3.018e2 ] } ]
}
}
Correspondência de endereço IP
É possível usar a correspondência de endereços IP para endereços IPv4 e IPv6. O padrão de eventos a seguir mostra o endereço IP correspondente aos endereços IP que começam com 10.0.0 e terminam com um número entre 0 e 255.
{
"detail": {
"sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ]
}
}
Existe correspondência
Existe correspondência funciona na presença ou ausência de um campo no JSON do evento.
A correspondência de existênciafunciona somente em nós folha. Ela não funciona em nós intermediários.
O padrão de evento a seguir corresponde a qualquer evento que tenha um campo detail.state
.
{
"detail": {
"state": [ { "exists": true } ]
}
}
Os padrões de evento anterior seriam correspondentes ao evento de exemplo a seguir.
{
"version": "0",
"id": "7bf73129-1428-4cd3-a780-95db273d1602",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "123456789012",
"time": "2015-11-11T21:29:54Z",
"region": "us-east-1",
"resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"],
"detail": {
"instance-id": "i-abcd1111",
"state": "pending"
}
}
O padrão do evento anterior NÃO corresponde ao evento seguinte porque não tem um campo detail.state
.
{
"detail-type": [ "EC2 Instance State-change Notification" ],
"resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ],
"detail": {
"c-count" : {
"c1" : 100
}
}
}
quals-ignore-caseCombinação E
A quals-ignore-case correspondência E funciona em valores de string, independentemente do caso.
O padrão de evento a seguir corresponde a qualquer evento que tenha um campo detail-type
que corresponda à string especificada, independentemente do caso.
{
"detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ]
}
Os padrões de evento anterior seriam correspondentes ao evento de exemplo a seguir.
{
"detail-type": [ "EC2 Instance State-change Notification" ],
"resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ],
"detail": {
"c-count" : {
"c1" : 100
}
}
}
Como corresponder usando curingas
É possível usar o caractere curinga (*) para encontrar o valor correspondente a valores de string em padrões de eventos.
nota
No momento, o caractere curinga é compatível somente com as regras do barramento de eventos.
Considerações ao usar curingas em seus padrões de eventos:
-
É possível especificar qualquer número de caracteres curinga em um determinado valor de cadeia de caracteres; no entanto, caracteres curinga consecutivos não são compatíveis.
-
EventBridge suporta o uso do caractere de barra invertida (\) para especificar os caracteres literais * e\ em filtros curinga:
-
A string
\*
representa o caractere literal * -
A string
\\
representa o caractere literal \
Não há compatibilidade para usar a barra invertida no escape de outros caracteres.
-
Curingas e complexidade do padrão de eventos
Há um limite para a complexidade de uma regra que usa curingas. Se uma regra for muito complexa, EventBridge retornará um InvalidEventPatternException
ao tentar criar a regra. Se sua regra gerar esse erro, considere usar a orientação abaixo para reduzir a complexidade do padrão do evento:
-
Reduza o número de caracteres curinga usados
Use somente caracteres curinga quando realmente precisar comparar com vários valores possíveis. Por exemplo, considere o seguinte padrão de eventos, em que deseja comparar com os barramentos de eventos na mesma região:
{ "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }
No caso acima, muitas das seções do ARN serão baseadas diretamente na região em que seus barramentos de eventos residem. Portanto, se estiver usando a região
us-east-1
, um padrão menos complexo que ainda corresponda aos valores desejados pode ser o seguinte exemplo:{ "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
-
Reduza as sequências de caracteres repetidas que ocorrem após um caractere curinga
Ter a mesma sequência de caracteres aparecendo várias vezes após o uso de um curinga aumenta a complexidade do processamento do padrão do evento. Reformule seu padrão de eventos para minimizar sequências repetidas. Por exemplo, considere o seguinte exemplo, que corresponde ao arquivo de nome
doc.txt
de arquivo de qualquer usuário:{ "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }
Se soubesse que o arquivo
doc.txt
só ocorreria no caminho especificado, poderia reduzir a sequência de caracteres repetidos desta forma:{ "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }
Exemplo complexo com várias correspondências
É possível combinar várias regras de correspondência em um padrão de evento mais complexo. Por exemplo, o padrão de evento a seguir combina anything-but
e numeric
.
{
"time": [ { "prefix": "2017-10-02" } ],
"detail": {
"state": [ { "anything-but": "initializing" } ],
"c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ],
"d-count": [ { "numeric": [ "<", 10 ] } ],
"x-limit": [ { "anything-but": [ 100, 200, 300 ] } ]
}
}
nota
Ao criar padrões de eventos, se incluir uma chave mais de uma vez, a última referência será aquela usada para avaliar eventos. Por exemplo, para o seguinte padrão:
{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }
somente { "anything-but": "us-east" }
serão levados em consideração ao avaliar a location
.
Exemplo complexo com correspondências de $or
Também é possível criar padrões de eventos complexos que verificam se os valores de algum campo coincidem em vários campos. Use $or
para criar um padrão de evento que corresponda se algum dos valores de vários campos for correspondido.
Observe que pode incluir outros tipos de filtro, como correspondência numérica e matrizes, na correspondência de padrões para campos individuais em sua estrutura $or
.
O seguinte padrão de evento corresponderá se alguma das condições a seguir for atendida:
-
O campo
c-count
é maior que 0 ou menor que ou igual a 5. -
O campo
d-count
é inferior a 10. -
O campo
x-limit
é igual a 3.018e2.
{
"detail": {
"$or": [
{ "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] },
{ "d-count": [ { "numeric": [ "<", 10 ] } ] },
{ "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] }
]
}
}
nota
As APIs que aceitam um padrão de evento (como PutRule
, CreateArchive
, UpdateArchive
eTestEventPattern
) lançarão uma InvalidEventPatternException
se o uso de resultados $or
em mais de mil combinações de regras.
Para determinar o número de combinações de regras em um padrão de evento, multiplique o número total de argumentos de cada matriz $or
no padrão de evento. Por exemplo, o padrão acima contém uma única matriz $or
com três argumentos, então o número total de combinações de regras também é três. Se adicionasse outra matriz $or
com dois argumentos, o total de combinações de regras seria então seis.