Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Enviar eventos con PutEvents
in Amazon EventBridge
La PutEvents
acción envía varios eventos EventBridge en una sola solicitud. Para obtener más información, consulte PutEventsAmazon EventBridge API Reference y put-events en AWS CLI Command Reference.
Cada solicitud PutEvents
puede admitir un número limitado de entradas. Para obtener más información, consulte EventBridge Cuotas de Amazon. La operación PutEvents
intenta procesar todas las entradas en el orden natural de la solicitud. Después de llamarPutEvents
, EventBridge asigna a cada evento un identificador único.
En el siguiente ejemplo, el código Java envía dos eventos idénticos a EventBridge.
Tras ejecutar este código, el resultado de PutEvents
incluye una matriz de entradas de respuesta. Cada entrada en la matriz de respuestas se corresponde con una entrada en la matriz de solicitudes siguiendo el orden de principio a fin de la solicitud y la respuesta. La matriz de respuesta Entries
siempre incluye el mismo número de entradas que la matriz de solicitud.
Gestión de errores con PutEvents
De forma predeterminada, si se produce un error en una entrada individual de una solicitud, EventBridge continúa procesando el resto de las entradas de la solicitud. Una matriz de Entries
de respuestas puede incluir entradas correctas e incorrectas. Debe detectar las entradas incorrectas e incluirlas en una llamada siguiente.
Las entradas de resultados correctas incluyen un valor Id
y las entradas de resultados incorrectas incluyen valores ErrorCode
y ErrorMessage
. ErrorCode
describe el tipo de error. ErrorMessage
proporciona más información acerca del error. El ejemplo siguiente tiene tres entradas de resultados para una solicitud PutEvents
. La segunda entrada no es correcta.
{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, { "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
nota
Si publicas PutEvents
un evento en un bus de eventos que no existe, la coincidencia de EventBridge eventos no encontrará la regla correspondiente y descartará el evento. Aunque EventBridge enviará una 200
respuesta, no rechazará la solicitud ni incluirá el evento en el FailedEntryCount
valor de la respuesta a la solicitud.
Puede incluir las entradas incorrectas en solicitudes PutEvents
posteriores. En primer lugar, compruebe el parámetro FailedRecordCount
en PutEventsResult
para confirmar si se hay entradas incorrectas. Si no es cero, puedes añadir cada Entry
que tenga un valor ErrorCode
que no sea nulo a una solicitud posterior. En el siguiente ejemplo se muestra un administrador de errores.
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); }
Enviar eventos mediante el AWS CLI
Puede utilizar el AWS CLI para enviar eventos personalizados a EventBridge fin de que se puedan procesar. El siguiente ejemplo coloca un evento personalizado en 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\" }"}]'
También puede crear un JSON archivo que contenga eventos personalizados.
[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]
A continuación, para usar el AWS CLI para leer las entradas de este archivo y enviar eventos, en una línea de comandos, escriba:
aws events put-events --entries file://
entries.json
Calcular el tamaño de la entrada del PutEvents evento
Cuando envías eventos personalizados para EventBridge usar la PutEvents
acción, puedes agrupar varias entradas de eventos en una sola solicitud para aumentar la eficiencia. Sin embargo, el tamaño total de la entrada debe ser inferior a 256 KB. Puede calcular el tamaño de entrada antes de enviar los eventos.
nota
Se impone un límite de tamaño en la entrada. Incluso si la entrada es inferior al límite de tamaño, el tamaño del evento siempre EventBridge es mayor que el tamaño de la entrada debido a los caracteres y claves necesarios para JSON representar el evento. Para obtener más información, consulte Eventos en Amazon EventBridge.
EventBridge calcula el PutEventsRequestEntry
tamaño de la siguiente manera:
-
Si se especifica, el parámetro
Time
es de 14 bytes. -
Los
DetailType
parámetrosSource
y son el número de bytes de sus UTF -8 formas codificadas. -
Si se especifica, el
Detail
parámetro es el número de bytes de su forma codificada UTF -8. -
Si se especifica, cada entrada del
Resources
parámetro es el número de bytes de sus UTF -8 formas codificadas.
El siguiente ejemplo de código Java calcula el tamaño de un objeto PutEventsRequestEntry
dado.
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; }
nota
Si el tamaño de la entrada es superior a 256 KB, recomendamos subir el evento a un bucket de Amazon S3 e incluir el Object URL
en la entrada PutEvents
.