

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.

# Envoyer des événements `PutEvents` via Amazon EventBridge
<a name="eb-putevents"></a>

L'`PutEvents`action envoie plusieurs [événements](eb-events.md) EventBridge dans une seule demande. Pour plus d'informations, consultez [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)la *référence des EventBridge API Amazon* et [put-events](https://docs.aws.amazon.com/cli/latest/reference/events/put-events.html) dans la référence des *AWS CLI commandes*.

Chaque demande `PutEvents` peut prendre en charge un nombre d'entrées limité. Pour de plus amples informations, veuillez consulter [EventBridge Quotas Amazon](eb-quota.md). L'opération `PutEvents` tente de traiter toutes les entrées dans l'ordre naturel de la demande. Après avoir appelé`PutEvents`, EventBridge attribue un identifiant unique à chaque événement.

L'exemple de code Java suivant envoie deux événements identiques à EventBridge.

------
#### [ AWS SDK for Java Version 2.x ]

```
EventBridgeClient eventBridgeClient =
    EventBridgeClient.builder().build();

PutEventsRequestEntry requestEntry = PutEventsRequestEntry.builder()
    .resources("resource1", "resource2")
    .source("com.mycompany.myapp")
    .detailType("myDetailType")
    .detail("{ \"key1\": \"value1\", \"key2\": \"value2\" }")
    .build();

List <
PutEventsRequestEntry > requestEntries = new ArrayList <
PutEventsRequestEntry > ();
requestEntries.add(requestEntry);

PutEventsRequest eventsRequest = PutEventsRequest.builder()
    .entries(requestEntries)
    .build();

PutEventsResponse result = eventBridgeClient.putEvents(eventsRequest);

for (PutEventsResultEntry resultEntry: result.entries()) {
    if (resultEntry.eventId() != null) {
        System.out.println("Event Id: " + resultEntry.eventId());
    } else {
        System.out.println("PutEvents failed with Error Code: " + resultEntry.errorCode());
    }
}
```

------
#### [ AWS SDK for Java Version 1.0 ]

```
EventBridgeClient eventBridgeClient =
    EventBridgeClient.builder().build();
    
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry()
        .withTime(new Date())
        .withSource("com.mycompany.myapp")
        .withDetailType("myDetailType")
        .withResources("resource1", "resource2")
        .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }");

PutEventsRequest request = new PutEventsRequest()
        .withEntries(requestEntry, requestEntry);

PutEventsResult result = awsEventsClient.putEvents(request);

for (PutEventsResultEntry resultEntry : result.getEntries()) {
    if (resultEntry.getEventId() != null) {
        System.out.println("Event Id: " + resultEntry.getEventId());
    } else {
        System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode());
    }
}
```

------

Après avoir exécuté ce code, le résultat de `PutEvents` inclut un tableau d’entrées de réponse. Chaque entrée de ce tableau correspond à une entrée du tableau de demandes dans l’ordre, du début à la fin de la demande et de la réponse. Le tableau de réponse `Entries` comprend toujours le même nombre d'entrées que le tableau de demande.

## Traitement des échecs avec `PutEvents`
<a name="eb-failure-handling"></a>

Par défaut, en cas d'échec d'une entrée individuelle dans une demande, EventBridge le traitement du reste des entrées de la demande est poursuivi. Un tableau `Entries` de réponses peut inclure à la fois des entrées réussies et infructueuses. Vous devez détecter les entrées infructueuses et les inclure dans un appel ultérieur.

Les entrées réussies incluent une valeur `Id` et les entrées infructueuses incluent des valeurs `ErrorCode` et `ErrorMessage`. `ErrorCode` décrit le type d’erreur. `ErrorMessage` fournit plus d’informations sur l’erreur. L’exemple suivant comporte trois entrées de résultat pour une demande `PutEvents`. La deuxième entrée est infructueuse.

```
{
    "FailedEntryCount": 1, 
    "Entries": [
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        },
        {   "ErrorCode": "InternalFailure",
            "ErrorMessage": "Internal Service Failure"
        },
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        }
    ]
}
```

**Note**  
Si vous `PutEvents` publiez un événement sur un bus d'événements qui n'existe pas, la mise en correspondance des EventBridge événements ne trouvera pas de règle correspondante et supprimera l'événement. Bien qu' EventBridge il envoie une `200` réponse, il n'échouera pas à la demande et n'inclura pas l'événement dans la `FailedEntryCount` valeur de la réponse à la demande.

Vous pouvez inclure les entrées qui sont infructueuses dans les demandes `PutEvents` ultérieures. Tout d’abord, pour savoir si la demande comporte des entrées ayant échoué, vérifiez le paramètre `FailedRecordCount` dans `PutEventsResult`. Si sa valeur est différente de zéro, vous pouvez ajouter chaque `Entry` qui comporte un `ErrorCode` non nul à une demande ultérieure. L’exemple suivant représente un gestionnaire d’échec.

```
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry()
        .withTime(new Date())
        .withSource("com.mycompany.myapp")
        .withDetailType("myDetailType")
        .withResources("resource1", "resource2")
        .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }");

List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    putEventsRequestEntryList.add(requestEntry);
}

PutEventsRequest putEventsRequest = new PutEventsRequest();
putEventsRequest.withEntries(putEventsRequestEntryList);
PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest);

while (putEventsResult.getFailedEntryCount() > 0) {
    final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>();
    final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries();
    for (int i = 0; i < PutEventsResultEntryList.size(); i++) {
        final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i);
        final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i);
        if (putEventsResultEntry.getErrorCode() != null) {
            failedEntriesList.add(putEventsRequestEntry);
        }
    }
    putEventsRequestEntryList = failedEntriesList;
    putEventsRequest.setEntries(putEventsRequestEntryList);
    putEventsResult = awsEventsClient.putEvents(putEventsRequest);
    }
```

## Envoi d'événements à l'aide du AWS CLI
<a name="eb-send-events-aws-cli"></a>

Vous pouvez utiliser le AWS CLI pour envoyer des événements personnalisés EventBridge afin qu'ils puissent être traités. L'exemple suivant place un événement personnalisé dans EventBridge :

```
aws events put-events \
--entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'
```

Vous pouvez également créer un fichier JSON qui contient des événements personnalisés.

```
[
  {
    "Time": "2016-01-14T01:02:03Z",
    "Source": "com.mycompany.myapp",
    "Resources": [
      "resource1",
      "resource2"
    ],
    "DetailType": "myDetailType",
    "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"
  }
]
```

Ensuite, pour utiliser le AWS CLI pour lire les entrées de ce fichier et envoyer des événements, à l'invite de commande, tapez :

```
aws events put-events --entries file://entries.json
```

## Calcul de la taille des entrées d' PutEvents événements
<a name="eb-putevent-size"></a>

Lorsque vous envoyez des événements personnalisés à EventBridge l'aide de l'`PutEvents`action, vous pouvez regrouper jusqu'à 10 entrées d'événements dans une seule demande pour plus d'efficacité. La taille totale de la demande, c'est-à-dire la somme de toutes les entrées d'événements de la demande, doit être inférieure à 1 Mo. Cette limite s'applique à la demande dans son ensemble, et non aux entrées individuelles. Un seul événement peut utiliser jusqu'à 1 Mo s'il s'agit de la seule entrée de la demande. Vous pouvez calculer la taille d’une entrée avant d’envoyer les événements.



**Note**  
La limite de taille est imposée pour l’*entrée*. Même si la taille de l'entrée est inférieure à la limite de taille, l'*événement* EventBridge est toujours supérieur à la taille de l'entrée en raison des caractères et des clés nécessaires à la représentation JSON de l'événement. Pour de plus amples informations, veuillez consulter [Événements sur Amazon EventBridge](eb-events.md).

EventBridge calcule la `PutEventsRequestEntry` taille comme suit :
+ Si le paramètre `Time` est spécifié, sa taille est de 14 octets.
+ La taille des paramètres `Source` et `DetailType` correspond au nombre d’octets de leur forme codée en UTF-8.
+ Si le paramètre `Detail` est spécifié, sa taille correspond au nombre d’octets de sa forme codée en UTF-8.
+ Si le paramètre `Resources` est spécifié, chacune de ses entrées correspond au nombre d’octets de sa forme codée en UTF-8.

L’exemple de code Java suivant calcule la taille d’un objet `PutEventsRequestEntry` donné. Afin de vérifier que la limite de 1 Mo n'est pas dépassée, vous devez effectuer le calcul pour tous les événements d'une demande.

```
int getSize(PutEventsRequestEntry entry) {
    int size = 0;
    if (entry.getTime() != null) {
        size += 14;
    }
    size += entry.getSource().getBytes(StandardCharsets.UTF_8).length;
    size += entry.getDetailType().getBytes(StandardCharsets.UTF_8).length;
    if (entry.getDetail() != null) {
        size += entry.getDetail().getBytes(StandardCharsets.UTF_8).length;
    }
    if (entry.getResources() != null) {
        for (String resource : entry.getResources()) {
            if (resource != null) {
                size += resource.getBytes(StandardCharsets.UTF_8).length;
            }
        }
    }
    return size;
}
```

**Note**  
Si la taille de l'entrée est supérieure à 1 Mo, nous vous recommandons de télécharger l'événement dans un compartiment Amazon S3 et de l'inclure `Object URL` dans l'`PutEvents`entrée.