Mise en correspondance d'événements et de filtres
Mettre en correspondance les événements avec des filtres de modèle dans les règles pour créer une automatisation.
Contexte
Pour comprendre le filtrage, il est utile d'examiner la structure d'un message d'événement. Le service d'événements utilise des objets JSON pour représenter les événements. Ceci est un événement :
{
"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"
}
}
}
Deux points clés à retenir concernant tous les événements :
- Tous les événements partagent le même jeu d'attributs de niveau supérieur, qui représentent l'enveloppe de l'événement. Ces attributs de niveau supérieur, à l'exception d'un seul, ne sont généralement pas utiles pour la création de filtres. Exception :
eventType
, qui identifie le type d'événement inclus dans les données utiles. -
Les données utiles de l'événement sont associées à l'attribut
data
. Les informations de ce champ dépendent du service qui a produit l'événement et du type d'événement demandé. Les informations des données utiles permettent de distinguer un événement d'un autre avec un filtre.
Pour plus d'informations sur l'enveloppe, voir Contenu d'un message d'événement. Pour consulter la liste de tous les services qui produisent des événements, voir Services qui génèrent des événements.
Mise en correspondance d'événements et de filtres
Les règles utilisent des filtres pour sélectionner des événements et les acheminer vers des ressources d'action. Une règle est représentée par un objet JSON, tout comme un événement. Le filtre est un attribut de la règle, et l'attribut est nommé condition
. Un filtre correspond à un événement ou non.
Voici quelques éléments importants à retenir à propos des filtres :
- Les champs non mentionnés dans un filtre sont ignorés. Vous pouvez créer un filtre valide correspondant à tous les messages d'événement au moyen d'une paire d'accolades.
- Pour qu'un filtre corresponde à un événement, l'événement doit contenir tous les noms de champ indiqués dans le filtre. Les noms de champ doivent figurer dans le filtre avec la même structure d'imbrication que celle utilisée dans l'événement.
- Les règles s'appliquent aux événements du compartiment dans lequel vous les créez et dans tous les compartiments enfants. Cela signifie qu'un filtre spécifié par une règle ne correspond qu'aux événements émis à partir des ressources du même compartiment ou des compartiments enfants.
-
La correspondance avec des caractères génériques est prise en charge par l'astérisque (*). Voir Exemples de correspondance avec caractère générique dans les filtres.
Exemples de filtres simples
Le filtre suivant correspond à tous les événements du compartiment et des compartiments enfants où vous créez la règle.
{
...
"condition": "{ }"
}
Lorsque vous ajoutez des champs au filtre, vous limitez les événements que le filtre peut mettre en correspondance. Par exemple, le filtre suivant ne correspond qu'à des événements deletebucket
.
{
...
"condition": "{
"eventType": "com.oraclecloud.objectstorage.deletebucket"
}"
}
Afin de créer un filtre pour plusieurs types d'événement, utilisez un tableau dans eventType
. Le filtre suivant correspond aux événements deletebucket
et createbucket
.
{
...
"condition": "{
"eventType": [
"com.oraclecloud.objectstorage.deletebucket",
"com.oraclecloud.objectstorage.createbucket"
]
}"
}
Exemples de filtres avec des attributs de données utiles d'événement
Les deux des filtres suivants correspondent à l'événement en haut de la page. Le premier, car il spécifie deux champs qui apparaissent dans l'événement; le deuxième, car le type NoPublicAccess apparaît dans l'événement.
Il est important de noter que le nom des champs dans le filtre correspond à la structure d'imbrication de l'événement.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket"
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Aucun des filtres suivants ne correspond à l'événement en haut de cette page. Le premier, car il spécifie un PublicAccessType qui ne se trouve pas dans l'événement. Le second, car l'événement spécifie un nom pour un seau différent.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket",
"additionalDetails": {
"publicAccessType": "PublicAccess"
}
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Exemples de tableaux dans les filtres
Un événement correspond à un filtre de type tableau si une de ses valeurs correspond à une des valeurs du filtre. Le filtre suivant correspond à l'événement en haut de la page, car le nom du seau dans l'événement est inclus dans un tableau du filtre.
{
...
"condition": "{
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Vous pouvez utiliser un tableau dans eventType
(ou un des champs de niveau supérieur), dans les données utiles de l'événement comme indiqué dans l'exemple précédent, ou bien dans les données utiles de l'événement et dans un champ de niveau supérieur.
{
...
"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"
}
}
}"
}
Exemples de correspondance avec caractère générique dans les filtres
Tenez compte des points suivants pour les correspondances avec caractère générique dans les filtres.
- N'utilisez les caractères génériques que dans les valeurs d'attribut. Vous ne pouvez pas utiliser l'astérisque pour la correspondance dans les clés.
- Une valeur d'attribut comprenant seulement un astérisque correspond à toutes les valeurs pour l'attribut associé, sauf la valeur nulle.
- Le point ne possède pas de signification spéciale dans un filtre.
Vous pouvez ajouter l'astérisque au début, au milieu ou à la fin d'une chaîne. Tous les filtres qui suivent correspondent à l'événement en haut de la page.
- Le premier, car le caractère générique dans
displayName
correspond au modèle de nom du seau. - Le deuxième, car
publicAccessType
utilise un caractère générique. En raison de l'utilisation du caractère générique, ces deux premiers filtres correspondent également aux événements des seaux avec un modèle de nom similaire. De plus, ils incluent des événements de seaux avec ou sans accès public. - Le troisième correspond car le type d'événement inclut tous les types d'événement de seau.
{
...
"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"
}
}
}"
}