Les modèles d'événements définissent les critères que les événements entrants doivent respecter avant qu'EventBridge ne les achemine vers une cible. Lorsque des événements proviennent de sources diverses avec des structures variées, il est nécessaire de sélectionner uniquement ceux pertinents pour votre traitement en aval. Un modèle d'événement est un objet JSON qui spécifie les champs et les valeurs à faire correspondre. EventBridge compare chaque événement entrant au modèle et ne transmet que les événements correspondants.
Un modèle doit partager la même structure imbriquée que les événements qu'il filtre.
Opérateurs pris en charge
Le tableau suivant résume tous les opérateurs de modèle. Chaque opérateur est encapsulé dans un tableau en tant que valeur du champ.
| Opérateur | Correspondance lorsque... | Exemple de syntaxe |
|---|---|---|
| Valeur exacte | Le champ est égal à la chaîne spécifiée | "source": ["acs.oss"] |
prefix |
La valeur du champ commence par la chaîne | "source": [{"prefix": "acs."}] |
suffix |
La valeur du champ se termine par la chaîne | "subject": [{"suffix": ".jpg"}] |
contains |
La valeur du champ inclut la chaîne | "type": [{"contains": "Normal"}] |
anything-but |
La valeur du champ n'est pas égale à la chaîne, au nombre ou à l'ensemble spécifié | "state": [{"anything-but": "initializing"}] |
anything-but + prefix |
La valeur du champ ne commence pas par la chaîne | "state": [{"anything-but": {"prefix": "init"}}] |
numeric |
La valeur du champ se situe dans une plage numérique | "c-count": [{"numeric": [">", 0, "<=", 5]}] |
cidr |
L'adresse IP se situe dans un bloc CIDR (IPv4 uniquement) | "source-ip": [{"cidr": "10.0.0.0/24"}] |
exists |
Le champ existe ou n'existe pas dans l'événement | "state": [{"exists": false}] |
| Chaîne vide | Le champ est égal à une chaîne vide | "eventVersion": [""] |
| Null | Le champ est nul | "responseElements": [null] |
Fonctionnement de la mise en correspondance
EventBridge évalue les modèles à l'aide de deux opérateurs logiques :
ET entre les clés : Toutes les clés du modèle doivent correspondre. Si un modèle spécifie à la fois
sourceettype, l'événement doit correspondre aux deux.OU entre les valeurs d'un tableau : La valeur de chaque clé est un tableau. Si le tableau contient plusieurs valeurs, l'événement correspond si l'une des valeurs correspond.
Règles de correspondance supplémentaires :
L'événement doit contenir tous les champs spécifiés dans le modèle. Les champs supplémentaires présents dans l'événement sont ignorés.
La correspondance s'effectue caractère par caractère et respecte la casse. EventBridge ne modifie pas les chaînes lors de l'évaluation.
Toutes les valeurs doivent être valides au format JSON : chaînes entre guillemets doubles (
""), mots-clés non entre guillemets (true,false,null), ou valeurs numériques.
Correspondance de valeur exacte
Faites correspondre les événements où un champ est égal à une valeur spécifique. Encapsulez la valeur dans un tableau.
Le modèle suivant fait correspondre les événements dont la source est acs.oss :
{
"source": [
"acs.oss"
]
}
Événement exemple (correspondance) :
{
"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
}
}
Correspondance par préfixe
Faites correspondre les événements dont la valeur d'un champ commence par une chaîne spécifiée. Utilisez l'opérateur prefix.
Le modèle suivant fait correspondre les événements dont la source commence par acs. :
{
"source": [
{
"prefix": "acs."
}
]
}
Correspondance par suffixe
Faites correspondre les événements dont la valeur d'un champ se termine par une chaîne spécifiée. Utilisez l'opérateur suffix.
Le modèle suivant combine des conditions de préfixe et de suffixe. Un événement correspond si la valeur de subject commence par le préfixe spécifié, OU se termine par .txt, OU se termine par .jpg :
{
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"
},
{
"suffix": ".txt"
},
{
"suffix": ".jpg"
}
]
}
Plusieurs valeurs dans le même tableau sont évaluées avec une logique OU. Un événement correspond si une seule condition du tableau est satisfaite.
Correspondance par inclusion
Faites correspondre les événements dont la valeur d'un champ inclut une sous-chaîne spécifiée. Utilisez l'opérateur contains.
Sous-chaîne unique
Le modèle suivant fait correspondre les événements dont le type contient Normal :
{
"type": [
{
"contains": "Normal"
}
]
}
Un événement avec "type": "UserNormalEvent" correspond. Un événement avec "type": "UserErrorEvent" ne correspond pas.
Plusieurs sous-chaînes (OU)
Le modèle suivant fait correspondre les événements dont le type contient Normal ou Error :
{
"type": [
{
"contains": "Normal"
},
{
"contains": "Error"
}
]
}
Un événement avec "type": "UserNormalEvent" correspond. Un événement avec "type": "UserErrorEvent" correspond également. Un événement avec "type": "UserOtherEvent" ne correspond pas.
Correspondance par exclusion (anything-but)
Faites correspondre les événements dont la valeur d'un champ n'est PAS égale aux valeurs spécifiées. L'opérateur anything-but prend en charge les chaînes, les nombres, les tableaux et les exclusions basées sur un préfixe.
Exclure une seule chaîne
Le modèle suivant fait correspondre les événements dont data.state n'est pas initializing :
{
"data": {
"state": [
{
"anything-but": "initializing"
}
]
}
}
Exclure un seul nombre
Le modèle suivant fait correspondre les événements dont data.x-limit n'est pas 123 :
{
"data": {
"x-limit": [
{
"anything-but": 123
}
]
}
}
Pour combiner plusieurs exclusions avec une logique ET, appliquez des conditions anything-but à différents champs dans le même modèle. L'événement doit satisfaire toutes les exclusions pour correspondre.
Exclure plusieurs chaînes
Le modèle suivant fait correspondre les événements dont data.state n'est ni stopped ni overloaded :
{
"data": {
"state": [
{
"anything-but": [
"stopped",
"overloaded"
]
}
]
}
}
Un événement avec "state": "terminated" correspond. Un événement avec "state": "stopped" ne correspond pas.
Exclure plusieurs nombres
Le modèle suivant fait correspondre les événements dont data.x-limit n'est pas 100, 200 ou 300 :
{
"data": {
"x-limit": [
{
"anything-but": [
100,
200,
300
]
}
]
}
}
Exclure par préfixe
Le modèle suivant fait correspondre les événements dont data.state ne commence pas par init :
{
"data": {
"state": [
{
"anything-but": {
"prefix": "init"
}
}
]
}
}
Un événement avec "state": "pending" correspond. Un événement avec "state": "initializing" ne correspond pas.
Exclure une source d'événement spécifique
Le modèle suivant fait correspondre les événements ne provenant pas d'Elastic Compute Service (ECS) :
{
"source": [
{
"anything-but": [
"acs.ecs"
]
}
]
}
Exclure tous les événements de service Alibaba Cloud
Le modèle suivant fait correspondre uniquement les événements provenant d'applications personnalisées en excluant toutes les sources dont le préfixe est acs. :
{
"source": [
{
"anything-but": {
"prefix": "acs."
}
}
]
}
Correspondance numérique
Faites correspondre les événements dont un champ numérique est égal à une valeur spécifique ou se situe dans une plage. Utilisez l'opérateur numeric avec un ou plusieurs opérateurs de comparaison : =, >, <, <=. Spécifiez une plage en associant deux opérateurs.
Le modèle suivant fait correspondre les événements où :
data.c-countest supérieur à 0 et inférieur ou égal à 5data.d-countest inférieur à 10data.x-limitest égal à 301,8
{
"data": {
"c-count": [
{
"numeric": [
">",
0,
"<=",
5
]
}
],
"d-count": [
{
"numeric": [
"<",
10
]
}
],
"x-limit": [
{
"numeric": [
"=",
301.8
]
}
]
}
}
La correspondance numérique prend en charge les valeurs comprises entre -1,0e9 et +1,0e9, avec une précision allant jusqu'à 15 chiffres et 6 décimales. Les valeurs doivent être au format numérique JSON.
Correspondance d'adresse IP
Faites correspondre les événements dont un champ d'adresse IP se situe dans un bloc CIDR. Utilisez l'opérateur cidr sur un champ de l'objet data. Seules les adresses IPv4 sont prises en charge.
Le modèle suivant fait correspondre les événements dont data.source-ip se trouve dans le sous-réseau 10.0.0.0/24 :
{
"data": {
"source-ip": [
{
"cidr": "10.0.0.0/24"
}
]
}
}
Un événement avec "source-ip": "10.0.0.123" correspond. Un événement avec "source-ip": "192.168.0.123" ne correspond pas.
Correspondance de valeur nulle et de chaîne vide
Chaîne vide
Faites correspondre les événements dont un champ est égal à une chaîne vide ("") :
{
"data": {
"eventVersion": [
""
]
}
}
Valeur nulle
Faites correspondre les événements dont un champ est null :
{
"data": {
"responseElements": [
null
]
}
}
Une valeur nulle et une chaîne vide sont différentes. Un modèle correspondant à""ne correspond pas ànull, et un modèle correspondant ànullne correspond pas à"".
Correspondance d'existence de champ
Faites correspondre les événements selon qu'un champ existe ou non dans l'objet data. Utilisez l'opérateur exists.
Le modèle suivant fait correspondre les événements où le champ data.state n'existe pas :
{
"data": {
"state": [
{
"exists": false
}
]
}
}
Définissez "exists": true pour faire correspondre les événements où le champ existe.
Correspondance de tableau
Les valeurs du modèle sont des tableaux. Lorsqu'un champ d'événement est également un tableau, EventBridge vérifie si les deux tableaux ont des éléments communs (intersection d'ensembles). Si l'intersection n'est pas vide, l'événement correspond.
Le modèle suivant fait correspondre les événements dont subject est égal à l'une des trois valeurs spécifiées :
{
"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"
]
}
Si le subject de l'événement est une chaîne unique correspondant à l'une des trois valeurs, l'événement correspond. Si le subject de l'événement est un tableau, l'événement correspond lorsqu'au moins un élément chevauche le tableau du modèle.
Conditions combinées
Combinez plusieurs opérateurs dans un seul modèle pour créer des filtres précis. EventBridge applique une logique ET à toutes les clés.
Le modèle suivant combine la correspondance par préfixe, par exclusion, par CIDR et numérique :
{
"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
]
}
]
}
}
Un événement correspond uniquement si TOUTES les conditions suivantes sont remplies :
sourcecommence paracs.data.staten'est pasinitializingdata.source-ipse situe dans10.0.0.0/24data.c-countest supérieur à 0 et au maximum égal à 5data.d-countest inférieur à 10data.x-limitn'est ni 100, ni 200, ni 300
Limites
| Élément | Limite |
|---|---|
| Plage de valeurs numériques | -1,0e9 à +1,0e9 |
| Précision numérique | Jusqu'à 15 chiffres, 6 décimales |
| Correspondance d'adresse IP | IPv4 uniquement |