Fazendo Correspondência de Eventos com Filtros
Combine eventos com filtros de padrão em regras para criar automação.
Contexto
Para compreender a filtragem, é útil revisar a estrutura de uma mensagem de evento real. O serviço Events usa objetos JSON para representar eventos. Este é um evento:
{
"cloudEventsVersion": "0.1",
"eventID": "<unique_ID>",
"eventType": "com.oraclecloud.objectstorage.deletebucket",
"source": "objectstorage",
"eventTypeVersion": "1.0",
"eventTime": "2019-01-10T21:19:24Z",
"contentType": "application/json",
"extensions": {
"compartmentId": "ocid1.compartment.oc1..<unique_ID>"
},
"data": {
"compartmentId": "ocid1.compartment.oc1..<unique_ID>",
"compartmentName": "example_name",
"resourceName": "my_bucket",
"resourceId": "ocid1.compartment.oc1..<unique_ID>",
"availabilityDomain": "NfHZ:PHX-AD-2",
"freeFormTags": {
"Department": "Finance"
},
"definedTags": {
"Operations": {
"CostCenter": "42"
}
},
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess",
"eTag": "f8ffb6e9-f602-460f-a6c0-00b5abfa24c7"
}
}
}
Dois pontos principais a serem lembrados sobre todos os eventos:
- Todos os eventos têm o mesmo conjunto de atributos de nível superior, que são conhecidos como envelope de evento. Com uma exceção, a maioria desses atributos de nível superior não é útil para criar filtros. A exceção é
eventType
, que identifica o tipo de evento incluído no payload. -
O payload do evento aparece dentro do atributo
data
. As informações nesse campo dependem de qual serviço gerou o evento e do tipo de evento solicitado. As informações do payload são úteis para isolar um evento de outro com um filtro.
Para obter mais informações sobre o envelope, consulte Conteúdo de uma Mensagem de Evento. Para obter uma lista de todos os serviços que geram eventos, consulte Serviços que Produzem Eventos.
Correspondência de Evento com Filtros
As regras usam filtros para selecionar eventos e encaminhá-los para entrega aos recursos da ação. Uma regra é representada como um objeto JSON, semelhante a um evento. O filtro é um atributo da regra e o atributo é denominado condition
. Um filtro corresponde a um evento ou não.
Alguns pontos importantes a serem lembrados sobre os filtros:
- Os campos não mencionados em um filtro são ignorados. Você pode criar um filtro válido que corresponda a todas as mensagens de evento com duas chaves.
- Para que um filtro corresponda a um evento, ele deve conter todos os nomes de campo listados no filtro. Os nomes de campo devem aparecer no filtro com a mesma estrutura de aninhamento usada no evento.
- As regras se aplicam a eventos no compartimento em que você os cria e a qualquer compartimento filho. Isso significa que um filtro especificado por uma regra só corresponde aos eventos emitidos por recursos do mesmo compartimento ou de todos os compartimentos filhos.
-
A correspondência de caracteres curinga é suportada com o caractere asterisco (*). Consulte Exemplos de Correspondência com Caracteres Curinga em Filtros.
Exemplos de Filtros Simples
O filtro a seguir corresponde a todos os eventos no compartimento e a todos os compartimentos filhos em que você cria a regra.
{
...
"condition": "{ }"
}
Ao adicionar campos ao filtro, você limita os eventos aos quais o filtro pode corresponder. Por exemplo, o filtro a seguir corresponde apenas a eventos deletebucket
.
{
...
"condition": "{
"eventType": "com.oraclecloud.objectstorage.deletebucket"
}"
}
Para criar um filtro para mais de um tipo de evento, use um array em eventType
. O filtro a seguir corresponde aos eventos deletebucket
e createbucket
.
{
...
"condition": "{
"eventType": [
"com.oraclecloud.objectstorage.deletebucket",
"com.oraclecloud.objectstorage.createbucket"
]
}"
}
Exemplos de Filtros com Atributos de Payload do Evento
Ambos os filtros a seguir corresponderiam ao evento na parte superior da página. O primeiro, porque o filtro especifica dois campos e os dois campos aparecem no evento, o segundo porque o tipo "NoPublicAccess" aparece no evento.
O importante a ser observado é como os nomes dos campos no filtro correspondem à estrutura de aninhamento do evento.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket"
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Nenhum dos filtros a seguir corresponderia ao evento na parte superior desta página. O primeiro, porque o filtro especifica um PublicAccessType não encontrado no evento. O segundo, porque o evento especifica um nome para outro bucket.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket",
"additionalDetails": {
"publicAccessType": "PublicAccess"
}
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Exemplos de Arrays em Filtros
Os arrays nos filtros correspondem aos eventos, se qualquer um dos valores no filtro corresponder a um valor em um evento. O filtro a seguir corresponderia ao evento na parte superior da página porque o nome do bucket no evento está incluído em um array no filtro.
{
...
"condition": "{
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Você pode usar um array em eventType
(ou em qualquer um dos campos de nível superior), o payload do evento, conforme mostrado no exemplo anterior, ou ambos, o payload do evento e um campo de nível superior.
{
...
"condition": "{
"eventType": [
"com.oraclecloud.objectstorage.deletebucket",
"com.oraclecloud.objectstorage.createbucket"
],
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Exemplos de Correspondência com Caracteres Curinga em Filtros
Veja a seguir alguns elementos a serem considerados sobre a correspondência de caracteres curinga com filtros.
- Use o caractere curinga somente nos valores de atributo. Não é possível usar o asterisco para correspondência em chaves.
- Um valor de atributo com apenas um asterisco corresponde a todos os valores do nome de atributo associado, mas não nulo.
- O caractere de ponto final não tem significado especial em um filtro.
Você pode adicionar o asterisco no início de uma string, no meio ou no final. Todos os filtros a seguir correspondem ao evento na parte superior da página.
- O primeiro corresponde porque o curinga em
displayName
corresponde ao padrão de nomenclatura do bucket. - O segundo corresponde porque
publicAccessType
usa um curinga. Devido ao uso do curinga, esses dois primeiros filtros também corresponderiam a eventos de buckets com um padrão de nomenclatura semelhante e incluiriam eventos de buckets com ou sem acesso público. - O terceiro corresponde porque o tipo de evento inclui todos os tipos de eventos de bucket.
{
...
"condition": "{
"data": {
"resourceName": "my_bucket*",
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
{
...
"condition": "{
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "*"
}
}
}"
}
{
...
"condition": "{
"eventType": "com.oraclecloud.objectstorage.*bucket",
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}