

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

# Target universal untuk Bus Acara Kustom
<a name="eb-custom-bus-universal-targets"></a>

Target * universal * memanggil tindakan AWS API langsung dari pelanggan, tanpa fungsi di antaranya. Alih-alih menamai antrian, topik, atau fungsi sebagai target, Anda memberi nama layanan dan tindakan API, dan Anda menulis permintaan API EventBridge yang dikirim, baik sebagai JSON tetap atau sebagai ekspresi JSONata yang membangun permintaan dari acara. Pelanggan dapat menulis item ke tabel DynamoDB, meletakkan objek di bucket Amazon S3, menerbitkan ke topik Amazon SNS, atau memulai eksekusi Fungsi Langkah tanpa fungsi Lambda di jalur.

## Target ARN
<a name="eb-custom-bus-universal-targets-arn"></a>

Target universal `TargetArn` memiliki bentuk tetap tanpa Wilayah dan tanpa akun:

```
arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}
```
+ {{service}}adalah pengen AWS al layanan SDK, yang tidak selalu merupakan nama layanan yang akrab. Misalnya, Fungsi Langkah adalah`sfn`, tidak`states`. Contoh yang berfungsi:`sqs`,`sns`,`s3`,`dynamodb`,`bedrockagentcore`.
+ {{apiAction}}adalah nama tindakan API di camelCase dengan huruf kecil pertama:`putItem`, bukan. `PutItem` EventBridge mencari nama persis seperti yang Anda tulis di indeks tindakannya, yang ada di camelCase, jadi `PutItem` ditolak oleh `CreateSubscriber` dengan pesan * Api tidak PutItem valid untuk layanan dynam * odb. Pesan yang sama berarti tindakan tidak ada untuk layanan itu.

Misalnya, memang `arn:aws:events:::aws-sdk:dynamodb:putItem` gil DynamoDB, dan `arn:aws:events:::aws-sdk:sns:publish` memanggil Amazon `PutItem` SNS. `Publish`

## Tindakan yang tidak didukung
<a name="eb-custom-bus-universal-targets-unsupported"></a>

Dua jenis tindakan tidak dapat menjadi target pelanggan, dan `CreateSubscriber` menolaknya dengan pesan yang mengatakan API, atau seluruh layanan, tidak didukung.
+ Tindakan yang membaca alih-alih mengubah status, seperti yang namanya dimulai dengan`get`,`list`, atau`describe`. Suatu peristiwa membawa sesuatu yang terjadi, jadi tindakan target harus berubah status. EventBridge menyimpan daftar nama dan layanan tindakan yang diblokir dan dapat menambahkannya, misalnya ketika tindakan tidak berperilaku sebagaimana seharusnya, sehingga tindakan yang diterima sekali tidak dijamin selamanya; perlakukan pesan waktu pembuatan sebagai otoritas.
+ T EventBridge indakan publikasi, `eventbridge:putEvents` dan`eventbridge:putPartnerEvents`. Untuk mengirimkan acara ke bus acara lain, atur bus ARN sebagai`TargetArn`; Bus Acara Kustom dan Bus Acara Kustom - Klasik keduanya didukung sebagai target dalam dirinya sendiri. Lihat [Target bus acara: bus ke bus](eb-custom-bus-target-bus.md).

## Parameter
<a name="eb-custom-bus-universal-targets-parameters"></a>

Target universal membutuhkan`InvokeConfiguration.UniversalTargetParameters`. `CreateSubscriber`menolak pelanggan yang menghilangkannya, atau yang memasok blok parameter yang berbeda seperti`SqsParameters`. Pesan itu mengatakan `UniversalTargetParameters` diharapkan. Bentuk permintaan melalui`Input`; pelanggan target universal tidak menggunakan pelanggan`Transformer`, jadi masukkan transformasi JSONata apa pun. `Input`

`Input`(diperlukan)  
Permintaan API, sebagai string JSON atau sebagai ekspresi JSONata yang dibungkus `{% %}` yang menghasilkan permintaan. Gunakan nama anggota dari referensi API target sendiri; untuk Amazon SQS `SendMessage` yaitu `QueueUrl` dan`MessageBody`. Hingga 262.144 karakter.  
JSON tetap `Input` diperiksa saat Anda membuat pelanggan terhadap bidang yang dibutuhkan API, dan bidang yang hilang ditolak berdasarkan nama. JSONata `Input` diperiksa hanya untuk sintaks, karena hasilnya tergantung pada peristiwa, jadi permintaan yang ditolak API target muncul pada waktu pengiriman sebagai gantinya.

`InvocationTimeoutSeconds`  
Berapa lama EventBridge menunggu satu panggilan API, dari 1 hingga 30 detik. Bawaannya adalah 30. Ini harus berupa bilangan bulat literal; ekspresi JSONata tidak diterima di sini.

Peran pengiriman `RoleArn` membutuhkan tindakan IAM untuk API yang Anda panggil, seperti`dynamodb:PutItem`, dan `sqs:SendMessage` pada antrean huruf mati. Untuk kebijakan kepercayaan peran dan izin lainnya, lihat[Kontrol akses untuk Bus Acara Kustom](eb-custom-bus-access.md).

## Batching dan array `$events`
<a name="eb-custom-bus-universal-targets-batching"></a>

EventBridge membuat satu panggilan API per batch, bukan satu per acara. `BatchConfiguration`mengatur batch: `MaxBatchSize` dari 1 hingga 500, dan `MaxBatchWindowInSeconds` dari 0 hingga 300. Sebuah batch ditutup ketika mencapai ukuran atau ketika jendela berlalu, mana yang lebih dulu.

Dalam JSONata`Input`, `$events` adalah batch: array peristiwa di dalamnya. Dengan ukuran batch 1, `$events.Data.orderId` menghasilkan nilai satu peristiwa. Dengan batch yang lebih besar, atasi array secara eksplisit`$join`, misalnya dengan `$map` dan, atau ekspresi menghasilkan array di mana API mengharapkan string dan pengiriman gagal.

Set `MaxBatchSize` el ke 1 dan `MaxBatchWindowInSeconds` 0 untuk membuat satu panggilan API untuk setiap peristiwa. Lakukan `Input` ini kapan pun JSON tetap, karena permintaan tetap identik untuk setiap peristiwa dalam batch dan batch menghasilkan satu panggilan.

## Contoh: satu item DynamoDB per acara
<a name="eb-custom-bus-universal-targets-example"></a>

Pelanggan berikut menulis satu item ke tabel DynamoDB untuk setiap peristiwa yang diterbitkan dengan`PutRawEvents`, mengambil kunci partisi dari bidang acara. `orderId` Peran pengiriman perlu `dynamodb:PutItem` di atas meja.

```
aws eventsv2 create-subscriber \
    --name orders-to-dynamodb \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --invoke-configuration '{
        "TargetArn": "arn:aws:events:::aws-sdk:dynamodb:putItem",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole",
        "UniversalTargetParameters": {
            "Input": "{% { \"TableName\": \"orders\", \"Item\": { \"pk\": { \"S\": $events.Data.orderId }, \"total\": { \"N\": $string($events.Data.total) } } } %}"
        }
    }' \
    --batch-configuration MaxBatchSize=1,MaxBatchWindowInSeconds=0 \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:orders-to-dynamodb-dlq" }'
```

Untuk acara yang diterbitkan dengan`PutEvents`, bidang yang sama ada di bawah`detail`:`$events.Data.detail.orderId`. Lihat [Struktur acara: data, metadata, dan metadata sistem](eb-custom-bus-addressing.md).

## Ketika panggilan API gagal
<a name="eb-custom-bus-universal-targets-failures"></a>

Saat Anda membuat pelanggan, EventBridge periksa bentuk ARN, apakah tindakan ada dan tidak diblokir, dan bahwa tetap `Input` membawa bidang tindakan yang diperlukan dan, untuk JSONata`Input`, bahwa ekspresi diurai. Itu tidak memeriksa apakah sumber daya yang disebutkan dalam permintaan ada atau bahwa peran pengiriman dapat memanggil tindakan. Kegagalan tersebut terjadi pada saat pengiriman, dan setiap kegagalan pengiriman dicoba ulang di bawah pelanggan`RetryPolicy`, secara default hingga 5 upaya dalam 300 detik. Ketika batas tercapai, EventBridge tulis catatan ke antrian huruf mati yang menyebutkan `errorCode` kegagalan terakhir. Kode yang dihasilkan target universal paling sering:
+ `CUSTOMER_VALIDATION`: API target menolak permintaan, misalnya bidang wajib yang hilang atau nilai di luar jangkauan. Catatan membawa pesan kesalahan API target sendiri.
+ `ACCESS_DENIED`: tidak EventBridge dapat mengambil peran pengiriman, atau peran tidak diizinkan untuk memanggil tindakan pada sumber daya. Catatan mengatakan yang mana, dalam EventBridge pesan yang menyebutkan peran atau sumber daya.
+ `RESOURCE_NOT_FOUND`: tabel, topik, atau sumber daya lain yang disebutkan dalam permintaan tidak ada.
+ `INPUT_TRANSFORMATION_FAILURE`: ekspresi JSONata di `Input` melemparkan kesalahan atau tidak menghasilkan nilai.
+ `THROTTLING`: API target membatasi panggilan. `REQUEST_TOO_LARGE`: permintaan melebihi batas ukuran tindakan; lebih rendah`MaxBatchSize`. `EXECUTION_TIMEOUT`: panggilan tidak kembali dalam batas waktu.

Untuk daftar lengkap kode kesalahan, pesan yang dibawa masing-masing, dan cara mengulang, lihat[Kebijakan coba ulang dan antrian surat mati](eb-custom-bus-retry.md). Aktifkan log pelanggan untuk melihat setiap upaya dan permintaan yang tepat yang dikirim; lihat[Pengamatan untuk Bus Peristiwa Kustom: metrik, log, dan CloudTrail](eb-custom-bus-observability.md).