

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.

# Unterstützte Inhaltstypen: JSON, Avro, Protobuf und Rohbytes
<a name="eb-custom-bus-open-formats"></a>

`PutRawEvents`akzeptiert alle Bytes. Jeder Eintrag gibt an, `SystemMetadata.ContentType` um EventBridge welche Byte es sich handelt, und dieser Wert entscheidet, ob die Nutzlast EventBridge deserialisiert wird, bevor das Ereignis gefiltert und ausgeliefert wird. Bei Avro und Protobuf wird die Nutzlast anhand einer Schemaregistrierung EventBridge deserialisiert, die Sie in der Anfrage benennen, sodass Abonnenten das Ereignis filtern, transformieren und als JSON empfangen. Bei undurchsichtigen Bytes wird die Nutzlast unverändert geliefert. EventBridge


| `ContentType` | Was EventBridge macht das mit der Payload | Schema Registry | 
| --- | --- | --- | 
| application/json | Filter und Transformationen für den JSON-Inhalt | Nicht verwendet | 
| application/avro | Deserialisiert die Avro-Binärdatei in JSON und filtert und transformiert dann nach diesem JSON | Erforderlich | 
| application/protobuf | Deserialisiert die Protobuf-Binärdatei in JSON und filtert und transformiert dann nach diesem JSON | Erforderlich | 
| application/octet-stream | Deserialisiert oder überprüft die Nutzlast nicht. Liefert die Bytes wie gesendet | Nicht verwendet | 

## Wie EventBridge deserialisiert eine Nutzlast
<a name="eb-custom-bus-open-formats-how"></a>

Wenn ein Eintrag den Wert `application/avro` oder hat `ContentType``application/protobuf`, EventBridge führt er die folgenden Schritte für diesen Eintrag aus.

1. EventBridge liest die Schema-ID, die der Serializer der Registry in die Payload-Bytes geschrieben hat.

1. EventBridge ruft das passende Schema aus der Registrierung ab, in der Sie einen Namen eingegeben haben`SchemaRegistryConfiguration.RegistryUri`, und deserialisiert die Nutzlast in JSON. Wenn das Schema nicht gefunden oder gelesen werden kann oder die Nutzlast nicht anhand des Schemas deserialisiert werden kann, schlägt der Eintrag fehl und es wird ein Fehler pro Eintrag angezeigt, und die anderen Einträge in der Anforderung bleiben davon unberührt.

1. Wenn ein Abonnent Filter definiert, werden diese anhand des deserialisierten EventBridge JSON-Objekts ausgewertet.

1. EventBridge wendet die Transformation des Abonnenten auf das deserialisierte JSON an und liefert JSON an das Ziel.

Sie benennen die Registrierung bei jeder `PutRawEvents` Anfrage in. `SchemaRegistryConfiguration.RegistryUri` Die Einstellung gehört zur Anfrage, nicht zum Bus, und EventBridge ignoriert sie bei JSON-Einträgen in derselben Anfrage. EventBridge liest die Registrierung mit den Anmeldeinformationen des Aufrufers, sodass die Identität, die veröffentlicht, Lesezugriff auf die Registrierung benötigt.

Nach der Deserialisierung verhält sich das Ereignis wie jedes JSON-Ereignis, das mit veröffentlicht wurde. `PutRawEvents` Ein Filter mit einem Gültigkeitsbereich von `DATA` gleicht Felder des deserialisierten Datensatzes anhand ihrer Schemanamen ab, ein JSONATA-Transformer adressiert sie unter `$events.Data` und ein Ziel empfängt JSON. EventBridge legt außerdem drei Schlüssel in den mitgelieferten Wert fest. `SystemMetadata`
+ `aws:SchemaId`: der Bezeichner des Schemas, das mit EventBridge deserialisiert wurde; eine UUID für AWS Glue, eine Ganzzahl für Confluent.
+ `aws:RegistryType`: die Registry, die das Ereignis dekodiert hat, oder. `Glue` `Confluent` Ereignisse, die mit veröffentlicht wurden, tragen es `PutEvents` nie.
+ `ContentType`: Der Inhaltstyp des veröffentlichten Eintrags, zum Beispiel`application/avro`.

## Wählen Sie aus, wie EventBridge Ihre Payload geliefert wird
<a name="eb-custom-bus-open-formats-delivery"></a>

`ContentType`wählt einen von zwei Lieferwegen aus.
+ **Deserialisieren Sie nach JSON. ** Auf `application/avro` oder setzen `ContentType``application/protobuf`. EventBridge deserialisiert die Payload anhand Ihrer Schemaregistrierung, und Abonnenten filtern nach`DATA`, transformieren mit JSONata und empfangen JSON. Verwenden Sie diesen Pfad, wenn Sie ein inhaltsbasiertes Routing und eine Umformung von schemakodierten Ereignissen wünschen.
+ **Stellen Sie unangetastete Bytes bereit. ** Auf `ContentType` setzen`application/octet-stream`. EventBridge deserialisiert oder überprüft die Payload nicht, es ist keine Schemaregistrierung beteiligt, und der Abonnent erhält exakt die Byte, die Sie gesendet haben. Verwenden Sie diesen Pfad, wenn Sie die Payload selbst am Ziel deserialisieren oder wenn es sich bei dem Inhalt um ein Format handelt, das nicht deserialisiert werden kann. EventBridge 

## Deserialisieren mit dem AWS Glue-Schema-Registrierung
<a name="eb-custom-bus-open-formats-glue"></a>

Auf `RegistryUri` den Registrierungs-ARN in der Form setzen`arn:aws:glue:{{region}}:{{account-id}}:registry/{{name}}`. Codieren Sie die Payload vor der Veröffentlichung mit dem AWS Glue Schema Registry-Serializer für Ihre Sprache. Der Serializer bettet die Schemareferenz ein, die zur Auflösung und Deserialisierung des Ereignisses EventBridge verwendet wird.

EventBridge liest das Schema wie der veröffentlichende Aufrufer, gewähren Sie also der veröffentlichenden Identität Lesezugriff auf die Registrierung und ihre Schemas. Die folgende Richtlinie gewährt die Mindestberechtigung, die auf eine Registrierung beschränkt ist.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:GetSchemaVersion",
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:registry/orders",
                "arn:aws:glue:us-east-1:111122223333:schema/orders/*"
            ]
        }
    ]
}
```

Veröffentlichen Sie die schemakodierten Bytes mit dem ARN der Glue-Registrierung in. `RegistryUri`

```
aws eventsv2 put-raw-events \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --schema-registry-configuration RegistryUri=arn:aws:glue:us-east-1:111122223333:registry/orders \
    --entries '[
        {
            "Data": "{{base64-encoded-avro-bytes}}",
            "SystemMetadata": { "ContentType": "application/avro", "EventGroupId": "order-1001" }
        }
    ]'
```

Ein Abonnent filtert dann nach dem deserialisierten Datensatz. Wenn das Avro-Schema ein Feld mit dem Namen hat`orderId`, entspricht der folgende Filter einer Reihenfolge.

```
{ "Scope": "DATA", "Pattern": "{\"orderId\":[\"1001\"]}" }
```

## Deserialisierung mit einer Confluent Schema Registry
<a name="eb-custom-bus-open-formats-confluent"></a>

Auf die `RegistryUri` HTTPS-URL der Registrierung setzen. Eine HTTPS-Registrierung benötigt außerdem den ARN einer EventBridge Verbindung`SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn`, die den API-Schlüssel oder die OAuth-Anmeldeinformationen der Registrierung enthält. Die Verbindung muss zum anrufenden Konto gehören; eine kontoübergreifende Verbindung wird abgelehnt. Erstellen Sie die Verbindung vor der ersten Veröffentlichung. Codieren Sie die Payload vor der Veröffentlichung mit dem Confluent-Serializer für Ihre Sprache. Der Serializer bettet die Schemareferenz ein, die zur Auflösung und Deserialisierung des Ereignisses verwendet wird. EventBridge 

EventBridge liest die Registrierungsdaten über die von Ihnen angegebene Verbindung. Erteilen Sie der Veröffentlichungsidentität die Erlaubnis, die Anmeldeinformationen dieser Verbindung zu lesen.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "events:RetrieveConnectionCredentials",
            "Resource": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/*"
        },
        {
            "Effect": "Allow",
            "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"],
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:events!connection/confluent-registry/*",
            "Condition": { "Bool": { "aws:ViaAWSService": "true" } }
        }
    ]
}
```

Wenn das Verbindungsgeheimnis mit einem vom Kunden verwalteten AWS KMS Schlüssel verschlüsselt ist, gewähren `kms:Decrypt` Sie auch diesen Schlüssel.

Veröffentlichen Sie die schemakodierten Bytes mit der Confluent-URL und dem Verbindungs-ARN.

```
aws eventsv2 put-raw-events \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --schema-registry-configuration '{
        "RegistryUri": "https://psrc-example.us-east-1.aws.confluent.cloud",
        "ConfluentPublicRegistryConfiguration": {
            "ConnectionArn": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/EXAMPLE-1234-5678-abcd"
        }
    }' \
    --entries '[
        {
            "Data": "{{base64-encoded-protobuf-bytes}}",
            "SystemMetadata": { "ContentType": "application/protobuf" }
        }
    ]'
```

### Optionen zur Verbindungsauthentifizierung
<a name="eb-custom-bus-open-formats-confluent-auth"></a>

Konfigurieren Sie die Verbindung mit dem Authentifizierungstyp, den die Confluent-Registry erwartet. EventBridge liest nur die Authentifizierungsheader, die die Verbindung erzeugt; das rohe Geheimnis sieht es nie und aktualisiert die OAuth-Token automatisch.

**API-Schlüssel. ** Confluent Schema Registry verwendet in der Regel die HTTP Basic-Authentifizierung mit dem API-Schlüssel der Schemaregistrierung als Benutzername und dem API-Schlüssel als Passwort.

```
aws events create-connection \
    --name confluent-registry \
    --authorization-type API_KEY \
    --auth-parameters '{
        "ApiKeyAuthParameters": {
            "ApiKeyName": "Authorization",
            "ApiKeyValue": "Basic {{base64(srApiKey:srApiSecret)}}"
        }
    }'
```

**OAuth-Client-Anmeldeinformationen. ** EventBridge ruft das Token ab und aktualisiert es. Sie müssen ihn `grant_type=client_credentials` als Körperparameter angeben; EventBridge fügt ihn nicht für Sie hinzu.

```
aws events create-connection \
    --name confluent-registry-oauth \
    --authorization-type OAUTH_CLIENT_CREDENTIALS \
    --auth-parameters '{
        "OAuthParameters": {
            "AuthorizationEndpoint": "https://{{idp-domain}}/oauth/token",
            "HttpMethod": "POST",
            "ClientParameters": {
                "ClientID": "{{oauth-client-id}}",
                "ClientSecret": "{{oauth-client-secret}}"
            },
            "OAuthHttpParameters": {
                "BodyParameters": [
                    { "Key": "grant_type", "Value": "client_credentials", "IsValueSecret": false }
                ]
            }
        }
    }'
```

EventBridge speichert beide Anmeldeinformationen in einem verwalteten Secrets Manager-Schlüssel (`events!connection/...`), den die Verbindung in Ihrem Namen liest.

## Bereitstellung von Bytes ohne Deserialisierung
<a name="eb-custom-bus-open-formats-passthrough"></a>

Um eine Payload genau so EventBridge auszuliefern, wie sie gesendet wurde, setzen Sie den Eintrag auf. `SystemMetadata.ContentType` `application/octet-stream` Dies ist ein Feld in jedem Eintrag, kein HTTP-Header. EventBridge deserialisiert oder überprüft die Bytes nicht und es ist keine Schemaregistrierung beteiligt, sodass jedes Format funktioniert, einschließlich Avro oder Protobuf, die Sie selbst am Ziel deserialisieren. Da der Inhalt undurchsichtig ist, kann ein Filter ihn nicht abgleichen. `DATA` Leiten Sie solche Ereignisse mit aktivierten Filtern weiter`METADATA`, indem Sie die Schlüssel verwenden, die Sie in der `Metadata` Karte des Eintrags festgelegt haben, oder aktiviert`SYSTEM_METADATA`. Content-based Die Deduplizierung funktioniert immer noch und hasht die Bytes genau so, wie Sie sie gesendet haben. In einem Transformator erscheint die Nutzlast als Base64-Zeichenfolge; siehe. [Transformieren von Ereignissen mit JSonata](eb-custom-bus-transform.md)

## Filtern und Transformieren deserialisierter Ereignisse
<a name="eb-custom-bus-open-formats-filtering"></a>

Sobald ein Ereignis in JSON EventBridge deserialisiert wurde, durchläuft die Nutzlast die normale Pipeline. Ein Filter mit einem Gültigkeitsbereich von `DATA` gleicht die deserialisierten Felder anhand ihrer Schemanamen ab, und ein JSONATA-Transformator adressiert sie unter. `$events.Data` Ein Ereignis, das als Avro oder Protobuf veröffentlicht wurde, erhält dasselbe inhaltsbasierte Routing und die gleiche Umformung pro Abonnent wie ein Ereignis, das als einfaches JSON veröffentlicht wurde. Schreiben Sie Filtermuster anhand des deserialisierten JSONs und beachten Sie dabei zwei Konvertierungsregeln.
+ **Avro ** deserialisiert auf Standard-JSON. Die Konvertierung erfolgt in eine Richtung: Die JSON-Datei kann nicht zurück in ein Avro-Objekt konvertiert werden.
+ **Protobuf ** deserialisiert mit den in Ihrem Schema definierten Feldnamen zu JSON, anstatt sie in die Groß-/Kleinschreibung umzuwandeln, wie es die Protobuf-Tools normalerweise tun. Entspricht den Schemafeldnamen.

## Formatübergreifende Deduplizierung von Ereignissen
<a name="eb-custom-bus-open-formats-dedup"></a>

EventBridge unterstützt zwei Deduplizierungsmodi: ID-based, bei dem Sie einen `DeduplicationId` für den Eintrag angeben, und inhaltsbasiert, bei dem ein SHA-256 Hash des EventBridge Ereignisinhalts berechnet wird. Bei deserialisierten Ereignissen hasht die inhaltsbasierte Deduplizierung die ursprünglichen Avro- oder Protobuf-Wire-Bytes, nicht das deserialisierte JSON. Zwei Ereignisse sind nur dann Duplikate, wenn ihre ursprünglichen Nutzdaten byteidentisch sind. Das gleiche logische Ereignis, das in verschiedenen Formaten veröffentlicht wird, wird daher nicht dedupliziert: Avro-Bytes, Protobuf-Bytes und rohes JSON unterscheiden sich auf der Leitung, auch wenn sie zu denselben Daten deserialisiert werden. Siehe [Reihenfolge und Deduplizierung von Ereignissen auf einem Custom Event Bus](eb-custom-bus-ordering.md).

## Fehler
<a name="eb-custom-bus-open-formats-errors"></a>
+ Ein Avro- oder Protobuf-Eintrag, der ohne veröffentlicht wurde, `SchemaRegistryConfiguration` schlägt als eintragsspezifischer Fehler fehl, und es wird eine Meldung angezeigt, die besagt. `ErrorCode` `VALIDATION_ERROR` `SchemaRegistryConfiguration is required` Die anderen Einträge in der Anfrage sind nicht betroffen.
+ Ein `ConnectionArn` Benutzer, der keine verwendbare Verbindung benennt oder zu einem anderen Konto gehört, schlägt bei der Eingabe fehl `VALIDATION_ERROR` und gibt eine Meldung, die die Registrierung benennt.
+ Bei einem Schema, das nicht gefunden oder gelesen werden kann, oder bei einer Nutzlast, die nicht anhand dieses Schemas deserialisiert werden kann, wird dieser Eintrag mit fehlschlagen. `VALIDATION_ERROR` Dieser Fehler kann nicht wiederholt werden. Korrigieren Sie die Anfrage oder den Registrierungszugriff des Anrufers, bevor Sie ihn erneut veröffentlichen.
+ Eine Registrierung, die nicht erreicht werden kann, schlägt mit fehl. `SchemaRegistryUnavailableException` Auf dem Confluent OAuth-Pfad kann dies passieren, während das Registrierungszugriffstoken aktualisiert wird. Dieser Fehler ist vorübergehend. Versuchen Sie die Anfrage erneut mit Backoff.

Ergebnisse pro Eintrag und allgemeine Hinweise zur Wiederholung von Versuchen finden Sie unter. [Ereignisse auf einem benutzerdefinierten Event-Bus veröffentlichen](eb-custom-bus-publish.md)