

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Bonnes pratiques relatives aux modèles EventBridge d'événements Amazon
<a name="eb-patterns-best-practices"></a>

Vous trouverez ci-dessous quelques bonnes pratiques à prendre en compte lors de la définition de modèles d’événements dans les règles de votre bus d’événements.

## Évitez d’écrire des boucles infinies
<a name="eb-patterns-best-practices-loops"></a>

Dans EventBridge, il est possible de créer des règles qui mènent à des boucles infinies, où une règle est déclenchée à plusieurs reprises. Par exemple, une règle peut détecter les modifications ACLs apportées à un compartiment S3 et déclencher le logiciel pour qu'il les modifie à l'état souhaité. Si la règle n'est pas écrite avec soin, la modification suivante la ACLs déclenche à nouveau, créant ainsi une boucle infinie.

Pour éviter ces problèmes, écrivez les modèles d’événements de vos règles aussi précisément que possible, afin qu’ils correspondent uniquement aux événements que vous souhaitez réellement envoyer à la cible. Dans l’exemple ci-dessus, vous créez un modèle d’événement pour mettre en correspondance des événements afin que les actions déclenchées ne déclenchent pas à nouveau la même règle. Par exemple, créez un modèle d'événement dans votre règle qui correspondrait aux événements uniquement s' ACLs ils s'avèrent être en mauvais état, plutôt qu'après une modification. Pour plus d’informations, consultez [Faites en sorte que les modèles d’événements soient aussi précis que possible](#eb-patterns-best-practices-precision) et [Définissez la portée de vos modèles d’événements pour prendre en compte les mises à jour de la source d’événement](#eb-patterns-best-practices-future-proof).

Une boucle infinie peut rapidement entraîner des coûts plus importants que prévu. Elle peut également entraîner des limitations et un retard dans la livraison des événements. Vous pouvez surveiller la limite supérieure de vos taux d’invocation pour être averti de pics de volume inattendus.

Utilisez les budgets pour vous avertir lorsque les frais dépassent votre limite spécifiée. Pour plus d'informations, consultez [Gestion des coûts avec les budgets](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html).

## Faites en sorte que les modèles d’événements soient aussi précis que possible
<a name="eb-patterns-best-practices-precision"></a>

Plus votre modèle d’événement est précis, plus il est probable qu’il corresponde uniquement aux événements auxquels vous souhaitez réellement qu’il corresponde. De plus, vous évitez les correspondances inattendues lorsque de nouveaux événements sont ajoutés à une source d’événement ou que des événements existants sont mis à jour pour inclure de nouvelles propriétés.

Les modèles d’événements peuvent inclure des filtres qui mettent en correspondance les éléments suivants :
+ Métadonnées de l’événement relatives à l’événement, telles que `source`, `detail-type`, `account` ou `region`.
+ Données de l’événement, c’est-à-dire les champs à l’intérieur de l’objet `detail`.
+ Contenu de l’événement ou valeurs réelles des champs à l’intérieur de l’objet `detail`.

La plupart des modèles sont simples, tels que la spécification des filtres `source` et `detail-type` uniquement. Cependant, EventBridge les modèles incluent la possibilité de filtrer sur n'importe quelle clé ou valeur de l'événement. En outre, vous pouvez appliquer des filtres de contenu tels que `prefix` et `suffix` pour améliorer la précision de vos modèles. Pour de plus amples informations, veuillez consulter [Utilisation d'opérateurs de comparaison dans les modèles EventBridge d'événements Amazon](eb-create-pattern.md#eb-event-patterns-content-based-filtering).

### Spécifiez la source de l’événement et le type de détail sous forme de filtres
<a name="eb-patterns-best-practices-source"></a>

Vous pouvez réduire la génération de boucles infinies et la mise en correspondance d’événements indésirables en rendant vos modèles d’événements plus précis à l’aide des champs de métadonnées `source` et `detail-type`.

Lorsque vous devez mettre en correspondance des valeurs spécifiques dans deux champs ou plus, utilisez l’opérateur de comparaison `$or`, plutôt que de répertorier toutes les valeurs possibles dans un seul tableau de valeurs.

Pour les événements diffusés via AWS CloudTrail, nous vous recommandons d'utiliser le `eventName` champ comme filtre.

L'exemple de modèle d'événement suivant correspond `CreateQueue` ou `SetQueueAttributes` provient du service Amazon Simple Queue Service, `CreateKey` ou à `DisableKeyRotation` des événements du AWS Key Management Service service.

```
{
  "detail-type": ["AWS API Call via CloudTrail"],
  "$or": [{
      "source": [
        "aws.sqs"
        ],
      "detail": {
        "eventName": [
          "CreateQueue",
          "SetQueueAttributes"
        ]
      }
    },
    {
      "source": [
        "aws.kms"
        ],
      "detail": {
        "eventName": [
          "CreateKey",
          "DisableKeyRotation"
        ]
      }
    }
  ]
}
```

### Spécifiez le compte et la région sous forme de filtres
<a name="eb-patterns-best-practices-accounts-regions"></a>

L’inclusion des champs `account` et `region` dans votre modèle d’événement permet de limiter la mise en correspondance des événements entre comptes ou entre régions. 

### Spécifiez des filtres de contenu
<a name="eb-patterns-best-practices-content"></a>

Le filtrage basé sur le contenu peut contribuer à améliorer la précision des modèles d’événements, tout en maintenant leur longueur au minimum. Par exemple, la mise en correspondance basée sur une plage numérique peut être utile au lieu de répertorier toutes les valeurs numériques possibles.

Pour de plus amples informations, veuillez consulter [Utilisation d'opérateurs de comparaison dans les modèles EventBridge d'événements Amazon](eb-create-pattern.md#eb-event-patterns-content-based-filtering).

## Définissez la portée de vos modèles d’événements pour prendre en compte les mises à jour de la source d’événement
<a name="eb-patterns-best-practices-future-proof"></a>

Lorsque vous créez des modèles d’événements, vous devez tenir compte du fait que les schémas d’événements et les domaines d’événements peuvent évoluer et s’étendre au fil du temps. Là encore, le fait de rendre vos modèles d’événements aussi précis que possible contribue à limiter les correspondances inattendues en cas de modification ou d’extension de la source d’événement.

Supposons, par exemple, que vous compariez des événements provenant d’un nouveau microservice qui publie des événements liés au paiement. Dans un premier temps, le service utilise le domaine `acme.payments` et publie un seul événement, `Payment accepted` :

```
{
  "detail-type": "Payment accepted",
  "source": "acme.payments",
  "detail": {
    "type": "{{credit}}",
    "amount": "{{100}}",
    "date": "{{2023-06-10}}",
    "currency": "{{USD}}"
    }
  }
}
```

À ce stade, vous pouvez créer un modèle d’événement simple qui correspond aux événements Payment accepted :

```
{ “source” : “acme.payments” }
```

Supposons toutefois que le service introduise ultérieurement un nouvel événement pour les paiements rejetés :

```
{
  "detail-type": "Payment rejected",
  "source": "acme.payments",
  "detail": {
  }
}
```

Dans ce cas, le modèle d'événement simple que vous avez créé correspondra désormais `Payment accepted` aux deux `Payment rejected` événements. EventBridge achemine les deux types d'événements vers la cible spécifiée pour traitement, ce qui peut entraîner des échecs de traitement et des coûts de traitement supplémentaires.

Pour définir la portée de votre modèle d’événements sur les événements `Payment accepted` uniquement, vous devez spécifier au moins `source` et `detail-type` :

```
{
  "detail-type": "Payment accepted",
  "source": "acme.payments"
  }
}
```

Vous pouvez également spécifier le compte et la région dans votre modèle d’événement, afin de limiter davantage les cas où les événements entre comptes ou entre régions correspondent à cette règle.

```
{
  "account": "{{012345678910}}",
  "source": "acme.payments",
  "region": "{{AWS-Region}}",
  "detail-type": "Payment accepted"
}
```

## Validez les modèles d’événements
<a name="eb-patterns-best-practices-validate"></a>

Pour garantir que les règles correspondent aux événements souhaités, nous vous recommandons vivement de valider vos modèles d’événements. Vous pouvez valider vos modèles d'événements à l'aide de la EventBridge console ou de l'API :
+ Dans la EventBridge console, vous pouvez créer et tester des modèles d'événements dans [le cadre de la création d'une règle](eb-create-rule-visual.md), ou séparément à [l'aide de la Sandbox.](eb-event-pattern-sandbox.md)
+ Vous pouvez tester vos modèles d'événements à l' AWS CLI aide de la [test-event-pattern](https://docs.aws.amazon.com/cli/latest/reference/events/test-event-pattern.html)commande.