EventBridge utilise des modèles d'événements pour filtrer et acheminer les événements vers des cibles. Un modèle d'événement est un module fourni par EventBridge qui définit des critères de correspondance : seuls les événements dont la structure et les valeurs correspondent au modèle sont transmis à la cible. Les modèles d'événements doivent présenter la même structure que les événements correspondants.
Fonctionnement de la mise en correspondance
EventBridge évalue chaque événement entrant par rapport à votre modèle en appliquant les règles suivantes :
|
Règle |
Description |
|
Correspondance structurelle |
L'événement doit contenir tous les champs définis dans le modèle, avec une imbrication identique. |
|
Comparaison sensible à la casse |
Les caractères sont comparés tels quels. EventBridge ne normalise ni ne modifie les chaînes lors de la mise en correspondance. |
|
Valeurs JSON uniquement |
Les valeurs des événements doivent être au format JSON valide : chaînes entre guillemets doubles, nombres sans guillemets ou les mots-clés |
|
ET entre les clés, OU au sein des tableaux |
Plusieurs clés dans un modèle utilisent la logique ET. Plusieurs valeurs dans le tableau d'une seule clé utilisent la logique OU. |
Référence des opérateurs
Utilisez le tableau suivant pour identifier l'opérateur adapté à vos besoins de filtrage. La syntaxe détaillée et des exemples figurent dans chaque section.
|
Opérateur |
Fonction |
Exemple de syntaxe |
|
Correspond à une valeur de champ spécifique |
|
|
|
Correspond au début d'une chaîne |
|
|
|
Correspond à la fin d'une chaîne |
|
|
|
Correspond à une sous-chaîne incluse dans une valeur |
|
|
|
Exclut des valeurs spécifiques |
|
|
|
Correspond à un nombre ou à une plage numérique |
|
|
|
Correspond à une plage d'adresses IPv4 |
|
|
|
Vérifie si un champ existe |
|
|
|
Correspond aux valeurs null ou |
|
|
|
Correspond à n'importe quelle valeur d'un tableau |
|
|
|
Combine plusieurs opérateurs |
Consultez la section Correspondance combinée |
Correspondance de valeur exacte
Pour faire correspondre des événements dont un champ est égal à une valeur spécifique, placez cette valeur dans un tableau.
Modèle :
{
"source": ["acs.oss"]
}
Ce modèle correspond aux événements dont le champ source est égal à "acs.oss". Les événements présentant une autre valeur pour source, telle que "acs.ecs" ou "acs.imm", ne correspondent pas.
Exemple — L'événement OSS suivant correspond car la valeur de source est "acs.oss" :
{
"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
}
}
Les événements dont la valeur de source diffère ne correspondent pas :
Un événement avec
"source": "acs.ecs"(Elastic Compute Service)Un événement avec
"source": "acs.imm"(Intelligent Media Management)
Correspondance par préfixe
Pour faire correspondre des événements dont la valeur d'un champ commence par une chaîne spécifique, utilisez l'opérateur prefix.
Modèle :
{
"source": [{"prefix": "acs."}]
}
Ce modèle correspond aux événements dont le champ source commence par "acs.", comme "acs.oss" et "acs.imm".
Correspondance par suffixe
Pour faire correspondre des événements dont la valeur d'un champ se termine par une chaîne spécifique, utilisez l'opérateur suffix.
Combinez les opérateurs prefix et suffix au sein du même tableau pour appliquer les deux conditions simultanément. Plusieurs entrées de suffixe utilisent la logique OU : l'événement correspond si l'un des suffixes correspond.
Modèle :
{
"subject": [
{"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"},
{"suffix": ".txt"},
{"suffix": ".jpg"}
]
}
Ce modèle correspond aux événements dont le champ subject commence par le préfixe de chemin OSS spécifié ET se termine par .txt ou .jpg. Un événement dont le champ subject se termine par .png ne correspond pas.
Correspondance par contenu
Pour faire correspondre des événements dont la valeur d'un champ contient une sous-chaîne spécifique, utilisez l'opérateur contains.
Sous-chaîne unique :
{
"type": [{"contains": "Normal"}]
}
Correspond à des événements tels que "type": "UserNormalEvent". Ne correspond pas à "type": "UserErrorEvent".
Plusieurs sous-chaînes (logique OU) :
{
"type": [
{"contains": "Normal"},
{"contains": "Error"}
]
}
Correspond aux événements dont le champ type contient soit "Normal", soit "Error". Les valeurs "UserNormalEvent" et "UserErrorEvent" correspondent toutes deux. En revanche, "UserOtherEvent" ne correspond pas.
Correspondance « Tout sauf »
Pour exclure les événements correspondant à des valeurs spécifiques, utilisez l'opérateur anything-but. Les événements présentant toute autre valeur pour le champ spécifié sont acceptés.
Exclure une chaîne unique
{
"data": {
"state": [{"anything-but": "initializing"}]
}
}
Correspond aux événements dont le champ data.state prend n'importe quelle valeur sauf "initializing". Par exemple, "state": "running" correspond.
Exclure un nombre unique
{
"data": {
"x-limit": [{"anything-but": 123}]
}
}
Correspond aux événements dont le champ data.x-limit prend n'importe quelle valeur sauf 123. Par exemple, "x-limit": 456 correspond.
Exclure plusieurs chaînes
{
"data": {
"state": [{"anything-but": ["stopped", "overloaded"]}]
}
}
Correspond aux événements dont le champ data.state prend n'importe quelle valeur sauf "stopped" ou "overloaded". Par exemple, "state": "terminated" correspond.
Exclure plusieurs nombres
{
"data": {
"x-limit": [{"anything-but": [100, 200, 300]}]
}
}
Correspond aux événements dont le champ data.x-limit prend n'importe quelle valeur sauf 100, 200 ou 300. Par exemple, "x-limit": 456 correspond.
Exclure par préfixe
{
"data": {
"state": [{"anything-but": {"prefix": "init"}}]
}
}
Correspond aux événements dont le champ data.state ne commence pas par "init". Par exemple, "state": "pending" correspond, mais "state": "initializing" ne correspond pas.
Exclure une source d'événement spécifique
{
"source": [{"anything-but": ["acs.ecs"]}]
}
Correspond aux événements provenant de n'importe quelle source sauf "acs.ecs". Par exemple, les événements issus de "acs.oss" correspondent.
Exclure tous les événements de service Alibaba Cloud
{
"source": [{"anything-but": {"prefix": "acs."}}]
}
Correspond uniquement aux événements provenant de sources personnalisées (non Alibaba Cloud). Tout événement dont le champ source commence par "acs." est exclu.
Correspondance numérique
Pour faire correspondre des événements en fonction de valeurs numériques ou de plages, utilisez l'opérateur numeric avec un ou plusieurs opérateurs de comparaison.
|
Opérateur de comparaison |
Description |
|
|
Égal à |
|
|
Supérieur à |
|
|
Supérieur ou égal à |
|
|
Inférieur à |
|
|
Inférieur ou égal à |
Définissez une plage en plaçant deux opérateurs dans le même tableau.
Condition unique :
{
"data": {
"d-count": [{"numeric": ["<", 10]}]
}
}
Correspond aux événements dont le champ data.d-count est inférieur à 10.
Condition de plage :
{
"data": {
"c-count": [{"numeric": [">", 0, "<=", 5]}]
}
}
Correspond aux événements dont le champ data.c-count est supérieur à 0 et inférieur ou égal à 5.
Valeur numérique exacte :
{
"data": {
"x-limit": [{"numeric": ["=", 301.8]}]
}
}
Correspond aux événements dont le champ data.x-limit est égal à 301.8. Un événement avec "x-limit": 300 ne correspond pas.
Plusieurs conditions numériques sur différents champs :
{
"data": {
"c-count": [{"numeric": [">", 0, "<=", 5]}],
"d-count": [{"numeric": ["<", 10]}],
"x-limit": [{"numeric": ["=", 301.8]}]
}
}
Les trois conditions doivent être vraies (logique ET entre les clés).
La correspondance numérique fonctionne uniquement avec des nombres au format JSON compris entre -1,0e9 et +1,0e9, avec une précision allant jusqu'à 15 chiffres et 6 décimales.
Correspondance d'adresse IP
Pour faire correspondre des événements en fonction d'une adresse IPv4 ou d'un bloc CIDR, utilisez l'opérateur cidr sur un champ de l'objet data.
Modèle :
{
"data": {
"source-ip": [{"cidr": "10.0.0.0/24"}]
}
}
Correspond aux événements dont le champ data.source-ip se situe dans la plage 10.0.0.0/24. Par exemple, "source-ip": "10.0.0.123" correspond, mais "source-ip": "192.168.0.123" ne correspond pas.
Seules les adresses IPv4 sont prises en charge.
Correspondance combinée
Combinez plusieurs opérateurs dans un seul modèle pour un filtrage précis. Les conditions portant sur différents champs utilisent la logique ET : toutes les conditions doivent être vraies pour que l'événement corresponde.
Le modèle suivant combine les opérateurs de préfixe, « tout sauf », 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]}]
}
}
Cet événement ne correspond que si toutes les conditions suivantes sont remplies :
Le champ
sourcecommence par"acs."Le champ
data.staten'est pas égal à"initializing"Le champ
data.source-ipse situe dans la plage10.0.0.0/24Le champ
data.c-countest supérieur à0et au plus égal à5Le champ
data.d-countest inférieur à10Le champ
data.x-limitn'est égal ni à100, ni à200, ni à300
Exemple de correspondance :
Un événement avec source: "acs.oss", state: "pending", source-ip: "10.0.0.123", c-count: 5, d-count: 7 et x-limit: 301.8 satisfait toutes les conditions.
Exemple de non-correspondance :
Un événement avec state: "initializing" et source-ip: "192.168.0.123" ne satisfait pas les conditions « tout sauf » et CIDR.
Correspondance de tableau
Lorsqu'un champ de modèle liste plusieurs valeurs dans un tableau, l'événement correspond si la valeur de son champ est égale à l'une des valeurs de ce tableau. Si le champ de l'événement est lui-même un tableau, l'événement correspond lorsque les deux tableaux partagent au moins un élément commun.
Valeur unique dans l'événement, plusieurs valeurs dans le modèle :
{
"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"
]
}
Correspond si le champ subject de l'événement est égal à l'une des trois valeurs.
Valeur de type tableau dans l'événement :
Si l'événement contient "subject": ["acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg", "acs.ecs:cn-hangzhou:123456789098****:215672"], il correspond car le premier élément apparaît à la fois dans le tableau du modèle et dans le tableau de l'événement.
Correspondance null et chaîne vide
Pour faire correspondre des événements dont un champ est null ou une chaîne vide "", placez la valeur cible dans un tableau.
Correspondre à une chaîne vide :
{
"data": {
"eventVersion": [""]
}
}
Correspond aux événements dont le champ data.eventVersion est égal à "". Ne correspond pas si la valeur est "1.0".
Correspondre à une valeur null :
{
"data": {
"responseElements": [null]
}
}
Correspond aux événements dont le champ data.responseElements est null. Ne correspond pas si la valeur est "lss" ou toute autre valeur non null.
Les valeurs null et les chaînes vides sont distinctes. Un modèle qui correspond à "" ne correspond pas à null, et inversement.
Correspondance d'existence de champ
Pour faire correspondre des événements en fonction de la présence ou non d'un champ dans l'objet data, utilisez l'opérateur exists.
Correspondre lorsqu'un champ n'existe pas :
{
"data": {
"state": [{"exists": false}]
}
}
Correspond aux événements dont l'objet data ne contient pas de champ state. Si le champ state est présent avec n'importe quelle valeur (y compris null), l'événement ne correspond pas.
Correspondre lorsqu'un champ existe :
{
"data": {
"state": [{"exists": true}]
}
}
Correspond aux événements dont l'objet data contient un champ state, quelle que soit sa valeur.