Corrispondenza tra eventi e filtri

Abbina gli eventi ai filtri dei pattern nelle regole per creare automazione.

Informazioni

Per comprendere i filtri, è utile rivedere la struttura di un messaggio di evento effettivo. Gli eventi utilizzano oggetti JSON per rappresentare gli eventi. Questo è un 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"
		}
	}
}

Due punti chiave da ricordare su tutti gli eventi: 

  • Tutti gli eventi hanno lo stesso set di attributi di livello superiore, noti come busta eventi. Con una sola eccezione, la maggior parte di questi attributi di livello superiore non è utile per la creazione di filtri. L'eccezione è eventType, che identifica il tipo di evento incluso nel payload.
  • Il payload dell'evento viene visualizzato all'interno dell'attributo data. Le informazioni in questo campo dipendono dal servizio che ha prodotto l'evento e dal tipo di evento richiesto. Le informazioni nel payload sono utili per isolare un evento da un altro con un filtro.

Per ulteriori informazioni sull'envelope, vedere Contenuto di un messaggio di evento. Per un elenco di tutti i servizi che producono eventi, vedere Servizi che producono eventi.

Corrispondenza eventi con filtri

Le regole utilizzano i filtri per selezionare gli eventi e instradarli per la consegna alle risorse azione. Una regola viene rappresentata come un oggetto JSON, simile a un evento. Il filtro è un attributo della regola e l'attributo è denominato condition. Un filtro corrisponde a un evento oppure no.

Alcune cose importanti da ricordare sui filtri:

  • I campi non menzionati in un filtro vengono ignorati. È possibile creare un filtro valido che corrisponda a tutti i messaggi evento con due parentesi graffe.
  • Affinché un filtro corrisponda a un evento, l'evento deve contenere tutti i nomi di campo elencati nel filtro. I nomi dei campi devono essere visualizzati nel filtro con la stessa struttura di nidificazione utilizzata nell'evento.
  • Le regole si applicano agli eventi nel compartimento in cui vengono create e a qualsiasi compartimento figlio. Ciò significa che un filtro specificato da una regola corrisponde solo agli eventi emessi dalle risorse nello stesso compartimento o in qualsiasi compartimento figlio.
  • La corrispondenza dei caratteri jolly è supportata dal carattere asterisco (*). Vedere Esempi di corrispondenza con caratteri jolly nei filtri.

Esempi di filtri semplici

Il filtro riportato di seguito corrisponde a ogni evento nel compartimento e a qualsiasi compartimento figlio in cui si crea la regola. 

{
... 

	"condition": "{ }"

}

Quando si aggiungono campi al filtro, è possibile limitare gli eventi a cui il filtro può corrispondere. Ad esempio, il filtro seguente corrisponde solo agli eventi deletebucket

{
...

	"condition": "{
		"eventType": "com.oraclecloud.objectstorage.deletebucket"
	}"
}

Per creare un filtro per più tipi di evento, utilizzare un array in eventType. Il filtro seguente corrisponde agli eventi deletebucket e createbucket

{
...

	"condition": "{
		"eventType": [
			"com.oraclecloud.objectstorage.deletebucket",
			"com.oraclecloud.objectstorage.createbucket"
		]
	}"
}

Esempi di filtri con attributi payload evento

Entrambi i seguenti filtri corrispondono all'evento nella parte superiore della pagina. Il primo perché il filtro specifica due campi ed entrambi vengono visualizzati nell'evento, il secondo perché nell'evento viene visualizzato il tipo "NoPublicAccess".

L'importante è notare come i nomi dei campi nel filtro corrispondano alla struttura di nidificazione dell'evento.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket"
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Nessuno dei seguenti filtri corrisponde all'evento nella parte superiore di questa pagina. Il primo perché il filtro specifica un valore PublicAccessType non trovato nell'evento. Il secondo perché l'evento specifica un nome per un bucket diverso.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket",
			"additionalDetails": {
				"publicAccessType": "PublicAccess"
			}
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Esempi di array nei filtri

Gli array nei filtri corrispondono agli eventi se uno qualsiasi dei valori nel filtro corrisponde a un valore in un evento. Il filtro seguente corrisponde all'evento nella parte superiore della pagina perché il nome del bucket nell'evento è incluso in un array nel filtro.

{
...

	"condition": "{
		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

È possibile utilizzare un array in eventType (o in uno qualsiasi dei campi di livello superiore), nel payload degli eventi come illustrato nell'esempio precedente oppure nel payload degli eventi e in un campo di livello superiore.

{
...

	"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"
			}
		}
	}"
}

Esempi di corrispondenza con caratteri jolly nei filtri

Di seguito sono riportate alcune considerazioni sulla corrispondenza dei caratteri jolly con i filtri.

  • Utilizzare il carattere jolly solo nei valori degli attributi. Non è possibile utilizzare l'asterisco per la corrispondenza nelle chiavi.
  • Un valore di attributo con solo un asterisco corrisponde a tutti i valori per il nome attributo associato, ma non nullo.
  • Il carattere punto non ha un significato speciale in un filtro.

È possibile aggiungere l'asterisco all'inizio di una stringa, al centro o alla fine. Tutti i filtri che seguono corrispondono all'evento nella parte superiore della pagina.

  • La prima corrisponde perché il carattere jolly in displayName corrisponde al pattern di denominazione del bucket.
  • Il secondo corrisponde perché publicAccessType utilizza un carattere jolly. A causa dell'uso del carattere jolly, questi primi due filtri corrispondono anche agli eventi dei bucket con un pattern di denominazione simile e includono eventi dei bucket con o senza accesso pubblico.
  • La terza corrisponde perché il tipo di evento include tutti i tipi di eventi 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"
			}
		}
	}"
}