

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Jenis konten yang didukung: JSON, Avro, Protobuf, dan byte mentah
<a name="eb-custom-bus-open-formats"></a>

`PutRawEvents`menerima byte apa pun. Setiap entri `SystemMetadata.ContentType` memberi EventBridge tahu apa itu byte, dan nilai itu memutuskan apakah akan EventBridge deserialisasi payload sebelum memfilter dan mengirimkan acara. Untuk Avro dan Protobuf, EventBridge deserialisasi payload terhadap registri skema yang Anda beri nama pada permintaan, sehingga pelanggan memfilter, mengubah, dan menerima acara sebagai JSON. Untuk byte buram, EventBridge memberikan payload yang tidak tersentuh.


| `ContentType` | Apa EventBridge hubungannya dengan payload | Skema registri | 
| --- | --- | --- | 
| application/json | Memfilter dan mengubah konten JSON | Tidak digunakan | 
| application/avro | Deserialisasi biner Avro ke JSON, lalu memfilter dan mengubah JSON itu | Diperlukan | 
| application/protobuf | Deserialisasi biner Protobuf ke JSON, lalu memfilter dan mengubah JSON itu | Diperlukan | 
| application/octet-stream | Tidak mendeserialisasi atau memeriksa muatan. Mengirimkan byte seperti yang dikirim | Tidak digunakan | 

## Bagaimana men EventBridge deserialisasi muatan
<a name="eb-custom-bus-open-formats-how"></a>

Ketika entri `ContentType` adalah `application/avro` atau`application/protobuf`, EventBridge lakukan langkah-langkah berikut untuk entri itu.

1. EventBridge membaca pengidentifikasi skema yang ditulis oleh serializer registri ke byte payload.

1. EventBridge mengambil skema yang cocok dari registri yang Anda beri nama`SchemaRegistryConfiguration.RegistryUri`, dan mendeserialisasi payload ke JSON. Jika skema tidak dapat ditemukan atau dibaca, atau payload tidak dapat dideserialisasi terhadapnya, entri gagal dengan kesalahan per entri dan entri lain dalam permintaan tidak terpengaruh.

1. Jika pelanggan mendefinisikan filter, evaluasi mereka EventBridge terhadap JSON yang dideserialisasi.

1. EventBridge menerapkan transformasi pelanggan ke JSON yang dideserialisasi dan mengirimkan JSON ke target.

Anda memberi nama registri pada setiap `PutRawEvents` permintaan, di`SchemaRegistryConfiguration.RegistryUri`. Pengaturan milik permintaan, bukan bus, dan EventBridge mengabaikannya untuk entri JSON dalam permintaan yang sama. EventBridge membaca registri dengan kredenSIAL pemanggil, sehingga identitas yang menerbitkan memerlukan akses baca ke registri.

Setelah deserialisasi, acara berperilaku seperti peristiwa JSON apa pun yang diterbitkan dengan. `PutRawEvents` Filter dengan cakupan men `DATA` cocokkan bidang rekaman yang dideserialisasi dengan nama skema mereka, transformator JSONata mengatasinya di bawah`$events.Data`, dan target menerima JSON. EventBridge juga menetapkan tiga kunci dalam pengiriman`SystemMetadata`.
+ `aws:SchemaId`: pengidentifikasi skema di EventBridge deserialisasi dengan; UUID untuk AWS Glue, bilangan bulat untuk Confluent.
+ `aws:RegistryType`: registri yang memecahkan kode acara, `Glue` atau`Confluent`. Acara yang diterbitkan dengan `PutEvents` tidak pernah membawanya.
+ `ContentType`: jenis konten dari entri yang diterbitkan, misalnya`application/avro`.

## Memilih cara EventBridge mengirimkan muatan Anda
<a name="eb-custom-bus-open-formats-delivery"></a>

`ContentType`memilih salah satu dari dua jalur pengiriman.
+ **Deserialisasi ke JSON. ** Set `ContentType` el ke `application/avro` atau`application/protobuf`. EventBridge mendeserialisasi payload terhadap registri skema Anda, dan pelanggan memfilter, mengubah dengan JSON `DATA` ata, dan menerima JSON. Gunakan jalur ini saat Anda menginginkan perutean berbasis konten dan pembentukan ulang peristiwa yang dikodekan skema.
+ **Kirim byte yang tidak tersentuh. ** Set `ContentType` el ke`application/octet-stream`. EventBridge tidak mendeserialisasi atau memeriksa payload, tidak ada registri skema yang terlibat, dan pelanggan menerima byte persis yang Anda kirim. Gunakan jalur ini saat Anda mendeserialisasi sendiri payload pada target, atau ketika konten adalah format yang EventBridge tidak dideserialisasi.

## Deserialisasi dengan AWS Registri Skema Lem
<a name="eb-custom-bus-open-formats-glue"></a>

Set `RegistryUri` el ke registri ARN, dari formulir`arn:aws:glue:{{region}}:{{account-id}}:registry/{{name}}`. Enkode payload dengan serializer AWS Glue Schema Registry untuk bahasa Anda sebelum menerbitkan; serializer menyematkan referensi skema yang digunakan untuk menyelesaikan dan des EventBridge erialisasi acara.

EventBridge membaca skema sebagai pemanggil penerbitan, jadi berikan akses baca identitas penerbitan ke registri dan skemanya. Kebijakan berikut memberikan izin minimum, yang dicakup ke satu registri.

```
{
    "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/*"
            ]
        }
    ]
}
```

Publikasikan byte yang dikodekan skema dengan registri Glue ARN di. `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" }
        }
    ]'
```

Pelanggan kemudian menyaring pada catatan yang dideserialisasi. Jika skema Avro memiliki bidang bernama`orderId`, filter berikut cocok dengan satu urutan.

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

## Deserialisasi dengan Registry Skema Confluent
<a name="eb-custom-bus-open-formats-confluent"></a>

Set `RegistryUri` el ke URL HTTPS registri. Registri HTTPS juga memerlukan`SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn`, ARN dari EventBridge koneksi yang memegang kunci API registri atau kredentif OAuth. Koneksi harus milik akun panggilan; koneksi lintas akun ditolak. Buat koneksi sebelum publikasi pertama. Enkode payload dengan serializer Confluent untuk bahasa Anda sebelum menerbitkan; serializer menyematkan referensi skema yang digunakan untuk menyelesaikan dan deserialisasi EventBridge peristiwa.

EventBridge membaca kredenSIAL registri melalui koneksi yang Anda beri nama. Berikan izin identitas penerbitan untuk membaca kredenSIAL koneksi tersebut.

```
{
    "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" } }
        }
    ]
}
```

Jika rahasia koneksi dienkripsi dengan AWS KMS kunci yang dikelola pelanggan, berikan `kms:Decrypt` juga kunci itu.

Publikasikan byte yang dikodekan skema dengan URL Confluent dan koneksi 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" }
        }
    ]'
```

### Opsi otentikasi koneksi
<a name="eb-custom-bus-open-formats-confluent-auth"></a>

Konfigurasikan koneksi dengan jenis otentikasi yang diharapkan registri Confluent. EventBridge hanya membaca header otentikasi yang dihasilkan koneksi; ia tidak pernah melihat rahasia mentah, dan menyegarkan token OAuth secara otomatis.

**Kunci API. ** Confluent Schema Registry biasanya menggunakan otentikasi HTTP Basic dengan kunci API registri skema sebagai nama pengguna dan rahasia API sebagai kata sandi.

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

**KredenSIAL klien OAuth. ** EventBridge mengambil dan menyegarkan token. Anda harus menyertakan `grant_type=client_credentials` sebagai parameter tubuh; EventBridge tidak menambahkannya untuk Anda.

```
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 menyimpan salah satu kredensi dalam rahasia Manajer Rahasia yang dikelola (`events!connection/...`), yang dibaca koneksi atas nama Anda.

## Mengirimkan byte tanpa deserialisasi
<a name="eb-custom-bus-open-formats-passthrough"></a>

Agar pengiriman EventBridge muatan persis seperti yang dikirim, setel entri `SystemMetadata.ContentType` ke`application/octet-stream`. Ini adalah bidang di setiap entri, bukan header HTTP. EventBridge tidak mendeserialisasi atau memeriksa byte, dan tidak ada registri skema yang terlibat, jadi format apa pun berfungsi, termasuk Avro atau Protobuf yang Anda deserialisasi sendiri di target. Karena kontennya buram, `DATA` filter tidak dapat mencocokkannya. Rute peristiwa tersebut dengan filter `METADATA` aktif, menggunakan tombol yang Anda atur di `Metadata` peta entri, atau aktif`SYSTEM_METADATA`. Content-based deduplikasi masih berfungsi dan hash byte persis seperti yang Anda kirim. Dalam transformator, payload muncul sebagai string Base64; lihat. [Mengubah acara dengan JSONata](eb-custom-bus-transform.md)

## Memfilter dan mengubah peristiwa yang dideserialisasi
<a name="eb-custom-bus-open-formats-filtering"></a>

Setelah EventBridge mendeserialisasi suatu peristiwa ke JSON, payload mengalir melalui pipeline normal. Filter dengan cakupan cocok dengan bidang yang dideserialisasi dengan nama skema mereka, dan transformator JSONata mengatasinya di bawah. `DATA` `$events.Data` Acara yang diterbitkan sebagai Avro atau Protobuf mendapatkan perutean berbasis konten dan pembentukan ulang per pelanggan yang sama dengan acara yang diterbitkan sebagai JSON biasa. Tulis pola filter terhadap JSON yang dideserialisasi, dengan mengingat dua aturan konversi.
+ **Avro men ** deserialisasi ke JSON standar. Konversi satu arah: JSON tidak dapat dikonversi kembali ke objek Avro.
+ **Protobuf men ** deserialisasi ke JSON dengan nama bidang yang ditentukan dalam skema Anda, daripada mengubahnya menjadi kasus unta seperti yang biasanya dilakukan alat Protobuf. Cocokkan pada nama bidang skema.

## Mendeduplikasi peristiwa di seluruh format
<a name="eb-custom-bus-open-formats-dedup"></a>

EventBridge mendukung dua mode deduplikasi: ID-based, di mana Anda menyediakan a `DeduplicationId` pada entri, dan berbasis konten, di mana EventBridge menghitung SHA-256 hash dari konten acara. Untuk peristiwa yang dideserialisasi, deduplikasi berbasis konten melakukan hash byte kawat Avro atau Protobuf asli, bukan JSON yang dideserialisasi. Dua peristiwa adalah duplikat hanya jika muatan aslinya identik byte. Oleh karena itu, peristiwa logis yang sama yang diterbitkan dalam format yang berbeda tidak diduplikasi: byte Avro, byte Protobuf, dan JSON mentah berbeda pada kawat bahkan ketika mereka deserialisasi ke data yang sama. Lihat [Memesan dan mendeduplikasi peristiwa pada Bus Acara Kustom](eb-custom-bus-ordering.md).

## Kesalahan
<a name="eb-custom-bus-open-formats-errors"></a>
+ Entri Avro atau Protobuf diterbitkan tanpa `SchemaRegistryConfiguration` gagal sebagai kesalahan per entri dengan `ErrorCode` dari `VALIDATION_ERROR` dan pesan yang menyatakan. `SchemaRegistryConfiguration is required` Entri lain dalam permintaan tidak terpengaruh.
+ A `ConnectionArn` yang tidak menyebutkan koneksi yang dapat digunakan, atau milik akun lain, gagal masuk dengan `VALIDATION_ERROR` dan pesan yang memberi nama registri.
+ Skema yang tidak dapat ditemukan atau dibaca, atau muatan yang tidak dapat dideserialisasi terhadapnya, gagal memasukkan entri tersebut. `VALIDATION_ERROR` Kesalahan ini tidak dapat dicoba ulang; perbaiki permintaan atau akses registri pemanggil sebelum menerbitkan ulang.
+ Registri yang tidak dapat dijangkau gagal dalam permintaan`SchemaRegistryUnavailableException`. Pada jalur Confluent OAuth, ini dapat terjadi saat token akses registri sedang disegarkan. Kesalahan ini bersifat sementara; coba lagi permintaan dengan backoff.

Untuk hasil per entri dan panduan coba lagi secara umum, lihat. [Menerbitkan acara ke Bus Acara Kustom](eb-custom-bus-publish.md)