

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

# Berlangganan acara di Bus Acara Kustom
<a name="eb-custom-bus-subscribers"></a>

Pelanggan adalah salah satu sumber daya yang mengatakan acara mana yang Anda inginkan dan ke mana harus mengirimnya. Anda membuatnya dengan`CreateSubscriber`, menamai bus, filter, dan satu target. Ini mengawasi bus itu, menyimpan peristiwa yang sesuai dengan filternya, secara opsional mengubah masing-masing, dan mengirimkannya ke tepat satu target. Untuk menggembirakan acara ke beberapa target, buat satu pelanggan untuk setiap target di bus yang sama.

EventBridge menerapkan satu pelanggan membuat atau menghapus pada satu waktu di bus tertentu, akun mana pun yang dipanggil. Bus kedua `CreateSubscriber` atau `DeleteSubscriber` di bus yang sama saat sedang berjalan gagal`ConcurrentModificationException`; coba lagi. [Kuota Bus Acara Kustom](eb-quota.md#eb-custom-bus-quotas)Oleh karena itu, tarif buat dan hapus berlaku per bus.

## Memfilter peristiwa mana yang mencapai target
<a name="eb-custom-bus-subscribers-filter"></a>

`FilterConfiguration`memegang daftar`Filters`. Setiap filter memiliki `Pattern` sintaks pola dalam EventBridge peristiwa, dan satu`Scope`. Anda dapat memiliki paling banyak satu filter per lingkup, dan EventBridge memberikan acara hanya jika cocok dengan setiap filter dalam daftar. Pelanggan tanpa `FilterConfiguration` menerima setiap acara di bus.
+ `DATA`: cocok dengan muatan. Tulis pola terhadap bentuk yang dijelaskan di[Struktur acara: data, metadata, dan metadata sistem](eb-custom-bus-addressing.md).
+ `METADATA`: cocok dengan pasangan kunci-nilai yang ditetapkan produsen`PutRawEvents`, hanya kecocokan tepat.
+ `SYSTEM_METADATA`: cocok dengan kum EventBridge pulan bidang, seperti `aws:Source` atau`EventGroupId`.

Untuk sintaks pola, aturan cakupan, dan contoh, lihat[Memfilter acara untuk pelanggan](eb-custom-bus-filtering.md).

## Mengubah muatan
<a name="eb-custom-bus-subscribers-transform"></a>

`Transformer.Type`Memilih apa yang diterima target. Target universal tidak menggunakannya; lihat[Target universal untuk Bus Acara Kustom](eb-custom-bus-universal-targets.md).
+ `RAW`, default. Muatan saja.
+ `WITH_METADATA`. Acara lengkap:`Data`,`Metadata`, dan`SystemMetadata`.
+ `JSONATA`. Hasil ekspresi JSONata masuk`JsonataConfiguration.Expression`, dibungkus dalam pembatas`{% %}`, dengan acara tersedia sebagai. `$events`

EventBridge memeriksa sintaks ekspresi saat Anda membuat pelanggan dan mengevaluasinya pada waktu pengiriman. Ekspresi yang melempar, atau yang tidak menghasilkan nilai, gagal dalam pengiriman peristiwa itu. Uji ekspresi terhadap peristiwa nyata sebelum Anda bergantung padanya. Untuk apa `$events` yang berlaku, fungsi tambahan, dan batasnya, lihat[Mengubah acara dengan JSONata](eb-custom-bus-transform.md).

## Menyampaikan ke satu target
<a name="eb-custom-bus-subscribers-deliver"></a>

`InvokeConfiguration`membawa`TargetArn`, `RoleArn` yang meng EventBridge asumsikan untuk memanggil target, dan paling banyak satu blok parameter yang cocok dengan tipe target. Sebagian besar nilai parameter menerima ekspresi JSONata, sehingga nilai dapat berasal dari peristiwa. Tabel berikut mencantumkan tipe target yang dipesan lebih dahulu dan blok parameternya; masing-masing memiliki halaman sendiri di [Target untuk pelanggan Bus Acara Kustom](eb-custom-bus-targets.md) bawahnya.


| Target | Blok parameter | 
| --- | --- | 
| Antrean Amazon SQS | SqsParameters | 
| Fungsi lambda | LambdaParameters | 
| Aliran Kinesis | KinesisParameters | 
| Fungsi langkah mesin status | StepFunctionsParameters | 
| Topik Amazon SNS | SnsParameters | 
| Titik akhir HTTP atau tujuan API | HttpParameters | 
| Aliran Firehose | FirehoseParameters | 

Bus Acara Kustom atau Bus Acara Kustom - Klasik juga dapat menjadi target: atur bus ARN sebagai`TargetArn`. Untuk target FIFO seperti antrian Amazon SQS FIFO, tetapkan pengidentifikasi deduplikasi target sendiri di blok parameter, misalnya`SqsParameters.MessageDeduplicationId`, ke nilai per pesan yang diturunkan dari peristiwa dengan ekspresi JSONata. Konstanta membuat target membuang setiap pesan setelah yang pertama.

Target * universal * memanggil tindakan AWS API secara langsung, tanpa fungsi di antaranya. ARN-nya memiliki bentuk`arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}`, misalnya`arn:aws:events:::aws-sdk:dynamodb:putItem`, dan menyimpan permintaan sebagai JSON atau sebagai ekspresi JSONata yang memproduksinya. `UniversalTargetParameters.Input` Untuk aturan penamaan, batching, dan perilaku kegagalan, lihat[Target universal untuk Bus Acara Kustom](eb-custom-bus-universal-targets.md).

Saat Anda membuat pelanggan, EventBridge menyelesaikan jenis target dari ARN dan memeriksa tiga hal: bahwa blok parameter cocok dengan tipe target, bahwa ARN milik akun Anda, dan bahwa setiap ekspresi diurai. Apakah target ada, apakah peran dapat mencapainya, dan apakah API target menerima nilai diperiksa saat pengiriman, jadi konfirmasikan pengiriman pertama di target.

## Percobaan ulang dan antrian surat mati
<a name="eb-custom-bus-subscribers-retry"></a>

`RetryPolicy`menetapkan berapa lama EventBridge percobaan ulang pengiriman yang gagal, secara default 5 upaya dalam 300 detik, dan memberi `OnFailureConfiguration.Arn` nama antrian Amazon SQS yang menerima catatan untuk setiap peristiwa yang menghabiskan percobaan ulang. Atur keduanya saat Anda membuat pelanggan. Untuk batasan, format rekaman, dan cara mengulang, lihat[Kebijakan coba ulang dan antrian surat mati](eb-custom-bus-retry.md).

## Peran pengiriman
<a name="eb-custom-bus-subscribers-role"></a>

Peran `RoleArn` harus milik akun Anda dan mempercayai prinsi `events.amazonaws.com` pal layanan. Penelep `iam:PassRole` on Anda membutuhkan peran untuk membuat pelanggan, atau EventBridge menolak permintaan sebelum memeriksa ARN target. Kebijakan izin peran memerlukan dua hibah.
+ Tindakan yang dibutuhkan target, misalnya `sqs:SendMessage` pada antrian, `lambda:InvokeFunction` pada fungsi, `sns:Publish` pada topik, atau `kinesis:PutRecords` pada aliran.
+ `sqs:SendMessage`di antrian huruf mati di. `OnFailureConfiguration.Arn` Tanpa itu, pengiriman yang gagal tidak memiliki tempat untuk merekam dirinya sendiri, dan peristiwa itu hilang tanpa sinyal.

Kebijakan kepercayaan berikut memungkinkan EventBridge untuk mengambil peran.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { "Service": "events.amazonaws.com" },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

Kebijakan izin berikut mengirimkan ke antrian Amazon SQS dan huruf mati ke antrian kedua.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "InvokeTheTarget",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders"
        },
        {
            "Sid": "WriteToTheDeadLetterQueue",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq"
        }
    ]
}
```

## Contoh: mengirimkan pesanan besar ke antrian
<a name="eb-custom-bus-subscribers-example"></a>

Perintah berikut membuat pelanggan yang mengirimkan pesanan lebih dari 500 ke antrian Amazon SQS, untuk acara yang diterbitkan dengan`PutEvents`, dan mengirimkan kegagalan ke antrian surat mati.

```
aws eventsv2 create-subscriber \
    --name large-orders \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --filter-configuration '{
        "Filters": [
            { "Scope": "DATA", "Pattern": "{\"detail\":{\"total\":[{\"numeric\":[\">\",500]}]}}" }
        ]
    }' \
    --invoke-configuration '{
        "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole"
    }' \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" }'
```

## Pemecahan masalah: Anda menerbitkan dan tidak ada yang sampai pada target
<a name="eb-custom-bus-subscribers-nothing-arrived"></a>

Tanggapan publikasi hanya mengatakan bahwa bus menerima dan menyimpan acara; itu tidak pernah mengkonfirmasi pengiriman. Kerjakan pemeriksaan berikut secara berurutan.

Gejala  
Panggilan publikasi mengembalikan HTTP 200 tanpa entri yang gagal, dan target tidak menerima apa pun setelah beberapa menit.

Penyebab  
Salah satu dari lima hal, dalam urutan frekuensi: pengiriman masih dicoba ulang; pelanggan dicabut `STOPPED` atau dicabut; pelanggan `StartingPosition` adalah `LATEST` dan acara dipublikasikan sebelum pelanggan ada; filter ditulis untuk API publikasi lainnya dan tidak cocok dengan apa pun; atau peran pengiriman tidak dapat mencapai target atau antrian surat mati. `TargetInvocations`memberitahu Anda bagian mana dari masalah yang Anda miliki. Poin data aktif `TargetInvocations` tanpa menyala `EventsDelivered` berarti pengiriman dicoba dan gagal. Tidak ada titik data aktif `TargetInvocations` saat mem `FilterEvaluated` ilikinya berarti tidak ada pengiriman yang dicoba; periksa apakah pelanggan ada`RUNNING`, dan periksa. `EventTransformationFailures`

Solusi  

1. Baca pelanggan. `State`harus `RUNNING` dan `Revoked` harus absen; itu hanya muncul ketika benar. Catatan `StartingPosition` dan filter.

   ```
   aws eventsv2 describe-subscriber \
       --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef
   ```

1. Baca metrik pelanggan di`AWS/EventsV2`. `FilterEvaluated`pada nol berarti tidak ada peristiwa yang mencapai pelanggan ini: produsen menerbitkan ke bus lain, atau sebelum pelanggan ada bersama`LATEST`. `FilterEvaluated`di atas nol dengan `FilterMatched` nol berarti filter tidak cocok; lihat[Struktur acara: data, metadata, dan metadata sistem](eb-custom-bus-addressing.md). Ketika `FilterMatched` memiliki titik data dan `EventsDelivered` tidak, pengiriman gagal, dan metrik mana yang mencatat hasilnya tergantung pada pelanggan: `EventsDropped` ketika tidak ada antrian huruf mati yang dikonfigurasi, `OnFailureDestinationDelivered` ketika acara mencapai antrian, dan `OnFailureDestinationFailed` kapan tidak.

1. Nyalakan log dan reproduksi. Set `LogConfiguration.Level` el `IncludePayload` ke `INFO` dan ke`FULL`, kaitkan pengiriman log, publikasikan lagi, dan baca `EVENT_DELIVERY_ATTEMPT` catatan. Masing-masing membawa kode kesalahan dan pesan target sendiri, dan`details.target_input`, yang merupakan apa yang EventBridge dikirim daripada apa yang ingin Anda kirim. Lihat [Pengamatan untuk Bus Peristiwa Kustom: metrik, log, dan CloudTrail](eb-custom-bus-observability.md).

1. Jika filter adalah tersangka, tambahkan pelanggan diagnostik di bus yang sama tanpa filter `Transformer.Type``WITH_METADATA`, dan antrian yang Anda miliki sebagai target. Ini memberikan setiap acara persis seperti yang EventBridge dilihatnya, sebagai`Data`,`Metadata`, dan`SystemMetadata`. Kemudian sederhanakan filter Anda satu kondisi pada satu waktu; kondisi terakhir yang Anda hapus adalah penyebabnya.

Verifikasi  
Publikasikan satu acara yang harus cocok dan yang tidak seharusnya. Yang pertama tiba di target dan `EventsDelivered` bertambah satu; yang kedua tidak tiba dan ber `FilterEvaluated` tambah sementara `FilterMatched` tidak.

**catatan**  
Metrik pelanggan tersedia untuk pemilik bus dan pemilik pelanggan; lognya hanya dikirimkan ke pemilik pelanggan.