Envoyer des événements PutEvents via Amazon EventBridge - Amazon EventBridge

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

L'PutEventsaction envoie plusieurs événements EventBridge dans une seule demande. Pour plus d'informations, consultez PutEventsla EventBridge APIréférence Amazon et put-events 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. 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

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

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 JSON fichier contenant 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

Lorsque vous envoyez des événements personnalisés à EventBridge l'aide de l'PutEventsaction, vous pouvez regrouper plusieurs entrées d'événements dans une seule demande pour plus d'efficacité. Toutefois, la taille totale de l'entrée doit être inférieure à 256 Ko. 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 JSON représentation de l'événement. Pour de plus amples informations, veuillez consulter Événements sur Amazon EventBridge.

EventBridge calcule la PutEventsRequestEntry taille comme suit :

  • Si le paramètre Time est spécifié, sa taille est de 14 octets.

  • Les DetailType paramètres Source et correspondent au nombre d'octets pour leurs formes codées en UTF -8.

  • S'il est spécifié, le Detail paramètre est le nombre d'octets pour sa forme codée en UTF -8.

  • Si elle est spécifiée, chaque entrée du Resources paramètre correspond au nombre d'octets pour ses formes codées en UTF -8.

L’exemple de code Java suivant calcule la taille d’un objet PutEventsRequestEntry donné.

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 d’une entrée est supérieure à 256 Ko, nous vous recommandons de charger l’événement dans un compartiment Amazon S3 et d’inclure Object URL dans l’entrée PutEvents.