

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Senden von Ereignissen mit `PutEvents` in Amazon EventBridge
<a name="eb-putevents"></a>

Die `PutEvents` Aktion sendet mehrere [Ereignisse](eb-events.md) EventBridge in einer einzigen Anfrage an. Weitere Informationen finden Sie [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)in der *Amazon EventBridge API-Referenz* und [put-events](https://docs.aws.amazon.com/cli/latest/reference/events/put-events.html) in der *AWS CLI Befehlsreferenz*.

Jede `PutEvents`-Anforderung kann eine begrenzte Anzahl von Einträgen unterstützen. Weitere Informationen finden Sie unter [EventBridge Amazon-Kontingente](eb-quota.md). Die `PutEvents`-Operation versucht, alle Einträge in der natürlichen Reihenfolge der Anforderung zu verarbeiten. EventBridge Weist jedem Ereignis nach dem Aufruf `PutEvents` eine eindeutige ID zu.

Der folgende Java-Beispielcode sendet zwei identische Ereignisse an 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());
    }
}
```

------

Nachdem Sie diesen Code ausgeführt haben, enthält das `PutEvents`-Ergebnis ein Array von Antworteinträgen. Jeder Eintrag im Antwort-Array entspricht einem Eintrag im Anforderungs-Array in der Reihenfolge vom Anfang bis zum Ende der Anforderung und Antwort. Das Antwort-Array `Entries` enthält stets die gleiche Anzahl Einträge wie in der Anforderung.

## Behandlung von Fehlern bei `PutEvents`
<a name="eb-failure-handling"></a>

Wenn ein einzelner Eintrag in einer Anfrage fehlschlägt, EventBridge wird standardmäßig die Verarbeitung der restlichen Einträge in der Anforderung fortgesetzt. Ein Antwort-`Entries`-Array kann sowohl erfolgreiche als auch erfolglose Einträge enthalten. Sie müssen erfolglose Einträge erkennen und sie im nachfolgenden Aufruf aufnehmen.

Erfolgreiche Ergebniseinträge enthalten einen `Id`-Wert und erfolglose Ergebniseinträge enthalten `ErrorCode`- und `ErrorMessage`-Werte. `ErrorCode` beschreibt die Art des Fehlers. `ErrorMessage` enthält weitere Informationen über den Fehler. Im folgenden Beispiel gibt es drei Ergebniseinträge für eine `PutEvents`-Anforderung. Der zweite Eintrag ist erfolglos.

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

**Anmerkung**  
Wenn Sie früher `PutEvents` ein Ereignis in einem Event-Bus veröffentlichen, der nicht existiert, wird EventBridge beim Event-Matching keine entsprechende Regel gefunden und das Ereignis wird gelöscht. Es EventBridge wird zwar eine `200` Antwort gesendet, aber die Anfrage wird nicht fehlschlagen oder das Ereignis in den `FailedEntryCount` Wert der Anforderungsantwort einbeziehen.

Einträge, die erfolglos waren, können Sie in nachfolgenden `PutEvents`-Anforderungen aufnehmen. Wenn Sie herausfinden möchten, ob die Anforderung fehlerhafte Einträge enthält, überprüfen Sie zunächst den Parameter `FailedRecordCount` in `PutEventsResult`. Wenn er nicht Null ist, können Sie jeden `Entry`, der einen `ErrorCode` hat, der nicht Null ist, zu einer nachfolgenden Anforderung hinzufügen. Das folgende Beispiel zeigt einen einfachen Ausfall-Handler.

```
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);
    }
```

## Senden von Ereignissen mit dem AWS CLI
<a name="eb-send-events-aws-cli"></a>

Sie können das verwenden AWS CLI , um benutzerdefinierte Ereignisse an zu senden, EventBridge damit sie verarbeitet werden können. Im folgenden Beispiel wird ein benutzerdefiniertes Ereignis eingefügt 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\" }"}]'
```

Sie können auch eine JSON-Datei erstellen, die benutzerdefinierte Ereignisse enthält.

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

Geben Sie dann AWS CLI an der Befehlszeile Folgendes ein, um die Einträge aus dieser Datei zu lesen und Ereignisse zu senden:

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

## Die Größe des PutEvents Ereigniseintrags wird berechnet
<a name="eb-putevent-size"></a>

Wenn Sie benutzerdefinierte Ereignisse an EventBridge die `PutEvents` Aktion senden, können Sie aus Effizienzgründen bis zu 10 Ereigniseinträge zu einer Anfrage zusammenfassen. Die Gesamtgröße der Anfrage, d. h. die Summe aller Ereigniseinträge in der Anfrage, muss weniger als 1 MB betragen. Dieses Limit gilt für die Anfrage als Ganzes, nicht für einzelne Einträge. Ein einzelnes Ereignis kann bis zu 1 MB voll beanspruchen, wenn es der einzige Eintrag in der Anfrage ist. Sie können die Größe des Eintrags berechnen, bevor Sie die Ereignisse senden.



**Anmerkung**  
Die Größenbeschränkung hängt vom *Eintrag* ab. Selbst wenn der Eintrag die Größenbeschränkung unterschreitet, EventBridge ist das *Ereignis* in aufgrund der erforderlichen Zeichen und Schlüssel der JSON-Darstellung des Ereignisses immer größer als die Eintragsgröße. Weitere Informationen finden Sie unter [Ereignisse bei Amazon EventBridge](eb-events.md).

EventBridge berechnet die `PutEventsRequestEntry` Größe wie folgt:
+ Falls angegeben, misst der Parameter `Time` 14 Bytes.
+ Die Parameter `Source` und `DetailType` sind die Anzahl der Bytes für ihre in UTF-8 kodierte Form.
+ Falls angegeben, ist der Parameter `Detail` die Anzahl von Bytes für die entsprechende UTF-8 kodierte Form.
+ Falls angegeben, ist jeder Eintrag des Parameters `Resources` die Anzahl von Bytes für die entsprechende UTF-8 kodierte Form.

Das folgende Java-Code-Beispiel berechnet die Größe eines bestimmten `PutEventsRequestEntry`-Objekts. Um sicherzustellen, dass das Limit von 1 MB nicht überschritten wurde, müssen Sie die Berechnung für alle Ereignisse in einer Anfrage durchführen.

```
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;
}
```

**Anmerkung**  
Wenn der Eintrag größer als 1 MB ist, empfehlen wir, das Ereignis in einen Amazon S3 S3-Bucket hochzuladen und das `Object URL` in den `PutEvents` Eintrag aufzunehmen.