

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

# Menggunakan Lambda dengan Amazon SQS
<a name="with-sqs"></a>

**catatan**  
[Jika Anda ingin mengirim data ke target selain fungsi Lambda atau memperkaya data sebelum mengirimnya, lihat Amazon Pipes. EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html)

Anda dapat menggunakan fungsi Lambda untuk memproses pesan dalam antrean Amazon Simple Queue Service (Amazon SQS). [Lambda mendukung antrian [standar dan antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html)[first-in, first-out (FIFO](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html)) untuk pemetaan sumber acara.](invocation-eventsourcemapping.md) Anda juga dapat menggunakan mode yang disediakan untuk mengalokasikan sumber daya polling khusus untuk pemetaan sumber peristiwa Amazon SQS Anda. [Fungsi Lambda dan antrian Amazon SQS harus Wilayah AWS sama, meskipun bisa berbeda. Akun AWS](with-sqs-cross-account-example.md)

Saat memproses pesan Amazon SQS, Anda perlu menerapkan logika respons batch sebagian untuk mencegah pesan yang berhasil diproses dicoba ulang ketika beberapa pesan dalam batch gagal. [Utilitas Prosesor Batch](https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/) dari Powertools untuk AWS Lambda menyederhanakan implementasi ini dengan secara otomatis menangani logika respons sebagian batch, mengurangi waktu pengembangan dan meningkatkan keandalan.

**Topics**
+ [Memahami perilaku polling dan batching untuk pemetaan sumber peristiwa Amazon SQS](#sqs-polling-behavior)
+ [Menggunakan mode yang disediakan dengan pemetaan sumber peristiwa Amazon SQS](#sqs-provisioned-mode)
+ [Mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS](#sqs-configuring-provisioned-mode)
+ [Contoh acara pesan antrian standar](#example-standard-queue-message-event)
+ [Contoh acara pesan antrian FIFO](#sample-fifo-queues-message-event)
+ [Membuat dan mengonfigurasi pemetaan sumber peristiwa Amazon SQS](services-sqs-configure.md)
+ [Mengkonfigurasi perilaku penskalaan untuk pemetaan sumber peristiwa SQS](services-sqs-scaling.md)
+ [Menangani kesalahan untuk sumber peristiwa SQS di Lambda](services-sqs-errorhandling.md)
+ [Parameter Lambda untuk pemetaan sumber peristiwa Amazon SQS](services-sqs-parameters.md)
+ [Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS](with-sqs-filtering.md)
+ [Tutorial: Menggunakan Lambda dengan Amazon SQS](with-sqs-example.md)
+ [Tutorial: Menggunakan antrian Amazon SQS lintas akun sebagai sumber acara](with-sqs-cross-account-example.md)

## Memahami perilaku polling dan batching untuk pemetaan sumber peristiwa Amazon SQS
<a name="sqs-polling-behavior"></a>

[Dengan pemetaan sumber peristiwa Amazon SQS, Lambda melakukan polling antrian dan memanggil fungsi Anda secara sinkron dengan suatu peristiwa.](invocation-sync.md) Setiap acara dapat berisi sekumpulan beberapa pesan dari antrian. Lambda menerima peristiwa ini satu batch pada satu waktu, dan memanggil fungsi Anda sekali untuk setiap batch. Ketika fungsi Anda berhasil memproses suatu batch, Lambda menghapus pesannya dari antrean.

[Saat Lambda menerima batch, pesan tetap berada dalam antrean tetapi disembunyikan selama batas waktu visibilitas antrian.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) Jika fungsi Anda berhasil memproses semua pesan dalam batch, Lambda menghapus pesan dari antrian. Secara default, jika fungsi Anda mengalami kesalahan saat memproses batch, semua pesan dalam kumpulan tersebut akan terlihat lagi dalam antrian setelah batas waktu visibilitas berakhir. Untuk alasan ini, kode fungsi Anda harus dapat memproses pesan yang sama beberapa kali tanpa efek samping yang tidak diinginkan.

**Awas**  
Pemetaan sumber peristiwa Lambda memproses setiap peristiwa setidaknya sekali, dan pemrosesan duplikat catatan dapat terjadi. Untuk menghindari potensi masalah yang terkait dengan duplikat peristiwa, kami sangat menyarankan agar Anda membuat kode fungsi Anda idempoten. Untuk mempelajari lebih lanjut, lihat [Bagaimana cara membuat fungsi Lambda saya idempoten](https://repost.aws/knowledge-center/lambda-function-idempotent) di Pusat Pengetahuan. AWS 

Untuk mencegah Lambda memproses pesan beberapa kali, Anda dapat mengonfigurasi pemetaan sumber peristiwa untuk menyertakan [kegagalan item batch](services-sqs-errorhandling.md#services-sqs-batchfailurereporting) dalam respons fungsi, atau Anda dapat menggunakan [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)API untuk menghapus pesan dari antrian karena fungsi Lambda berhasil memprosesnya.

Untuk informasi selengkapnya tentang parameter konfigurasi yang didukung Lambda untuk pemetaan sumber peristiwa SQS, lihat. [Membuat pemetaan sumber acara SQS](services-sqs-configure.md#events-sqs-eventsource)

## Menggunakan mode yang disediakan dengan pemetaan sumber peristiwa Amazon SQS
<a name="sqs-provisioned-mode"></a>

Untuk beban kerja di mana Anda perlu menyempurnakan throughput pemetaan sumber peristiwa, Anda dapat menggunakan mode yang disediakan. Dalam mode yang disediakan, Anda menentukan batas minimum dan maksimum untuk jumlah poller acara yang disediakan. Poller acara yang disediakan ini didedikasikan untuk pemetaan sumber acara Anda, dan dapat menangani lonjakan pesan yang tidak terduga melalui penskalaan otomatis responsif. Pemetaan sumber peristiwa Amazon SQS yang dikonfigurasi dengan Mode Tertentu menskalakan 3x lebih cepat (hingga 1.000 pemanggilan bersamaan per menit) dan mendukung konkurensi 16x lebih tinggi (hingga 20.000 pemanggilan bersamaan) daripada kemampuan pemetaan sumber peristiwa Amazon SQS default. Kami menyarankan Anda menggunakan mode yang disediakan untuk beban kerja berbasis peristiwa Amazon SQS yang memiliki persyaratan kinerja yang ketat, seperti perusahaan jasa keuangan yang memproses umpan data pasar, platform e-commerce yang memberikan rekomendasi yang dipersonalisasi secara real-time, dan perusahaan game yang mengelola interaksi pemain langsung. Menggunakan mode yang disediakan menimbulkan biaya tambahan. Untuk harga terperinci, lihat [AWS Lambda harga](https://aws.amazon.com/lambda/pricing/).

Setiap poller peristiwa dalam mode yang disediakan dapat menangani hingga 1 throughput, hingga 10 MB/s pemanggilan bersamaan, atau hingga 10 panggilan API polling Amazon SQS per detik. Rentang nilai yang diterima untuk jumlah minimum poller peristiwa (MinimumPollers) adalah antara 2 dan 200, dengan default 2. Rentang nilai yang diterima untuk jumlah maksimum poller acara (MaximumPollers) adalah antara 2 dan 2.000, dengan default 200. MaximumPollers harus lebih besar dari atau sama dengan MinimumPollers.

### Menentukan poller acara yang diperlukan
<a name="sqs-determining-event-pollers"></a>

Untuk memperkirakan jumlah poller peristiwa yang diperlukan untuk memastikan kinerja pemrosesan pesan yang optimal saat menggunakan mode yang disediakan untuk SQS ESM, kumpulkan metrik berikut untuk aplikasi Anda: peristiwa SQS puncak per detik yang memerlukan pemrosesan latensi rendah, ukuran payload peristiwa SQS rata-rata, durasi fungsi Lambda rata-rata, dan ukuran batch yang dikonfigurasi.

Pertama, Anda dapat memperkirakan jumlah peristiwa SQS per detik (EPS) yang didukung oleh poller acara untuk beban kerja Anda menggunakan rumus berikut:

```
EPS per event poller = 
        minimum(
            ceiling(1024 / average event size in KB),
            ceiling(10 / average function duration in seconds) * batch size, 
            min(100, 10 * batch size)
                )
```

Kemudian, Anda dapat menghitung jumlah poller minimum yang diperlukan menggunakan rumus di bawah ini. Perhitungan ini memastikan Anda menyediakan kapasitas yang cukup untuk menangani persyaratan lalu lintas puncak Anda.

```
Required event pollers = (Peak number of events per second in Queue) / EPS per event poller
```

Pertimbangkan beban kerja dengan ukuran batch default 10, ukuran acara rata-rata 3 KB, durasi fungsi rata-rata 100 ms, dan persyaratan untuk menangani 1.000 peristiwa per detik. Dalam skenario ini, setiap poller acara akan mendukung sekitar 100 peristiwa per detik (EPS). Oleh karena itu, Anda harus menetapkan poller minimum hingga 10 untuk menangani persyaratan lalu lintas puncak Anda secara memadai. Jika beban kerja Anda memiliki karakteristik yang sama tetapi dengan durasi fungsi rata-rata 1 detik, setiap poller hanya akan mendukung 10 EPS, mengharuskan Anda mengonfigurasi 100 poller minimum untuk mendukung 1.000 peristiwa per detik pada latensi rendah.

Sebaiknya gunakan ukuran batch default 10 atau lebih tinggi untuk memaksimalkan efisiensi poller acara mode yang disediakan. Ukuran batch yang lebih tinggi memungkinkan setiap poller memproses lebih banyak acara per pemanggilan, untuk meningkatkan throughput dan efisiensi biaya. Saat merencanakan kapasitas poller acara Anda, perhitungkan potensi lonjakan lalu lintas dan pertimbangkan untuk menetapkan nilai MinimumPollers Anda sedikit lebih tinggi dari minimum yang dihitung untuk menyediakan buffer. Selain itu, pantau karakteristik beban kerja Anda dari waktu ke waktu, karena perubahan ukuran pesan, durasi fungsi, atau pola lalu lintas mungkin memerlukan penyesuaian konfigurasi poller acara Anda untuk mempertahankan kinerja dan efisiensi biaya yang optimal. Untuk perencanaan kapasitas yang tepat, kami sarankan untuk menguji beban kerja spesifik Anda untuk menentukan EPS aktual yang dapat didorong oleh setiap poller peristiwa.

## Mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS
<a name="sqs-configuring-provisioned-mode"></a>

Anda dapat mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS menggunakan konsol atau API Lambda.

**Untuk mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS yang ada (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi dengan pemetaan sumber peristiwa Amazon SQS yang ingin Anda konfigurasikan untuk mode yang disediakan.

1. Pilih **Konfigurasi**, lalu pilih **Pemicu.**

1. **Pilih pemetaan sumber peristiwa Amazon SQS yang ingin Anda konfigurasikan untuk mode yang disediakan, lalu pilih Edit.**

1. Di bawah **Konfigurasi pemetaan sumber peristiwa**, pilih **Konfigurasi mode yang disediakan**.
   + Untuk **poller acara Minimum**, masukkan nilai antara 2 dan 200. Jika Anda tidak menentukan nilai, Lambda memilih nilai default 2.
   + Untuk **poller acara Maksimum**, masukkan nilai antara 2 dan 2.000. Nilai ini harus lebih besar dari atau sama dengan nilai Anda untuk **poller acara Minimum**. Jika Anda tidak menentukan nilai, Lambda memilih nilai default 200.

1. Pilih **Simpan**.

Anda dapat mengonfigurasi mode yang disediakan secara terprogram menggunakan objek di. `ProvisionedPollerConfig` `EventSourceMappingConfiguration` Misalnya, perintah `UpdateEventSourceMapping` CLI berikut mengkonfigurasi `MinimumPollers` nilai 5, dan `MaximumPollers` nilai 100.

```
aws lambda update-event-source-mapping \
    --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
    --provisioned-poller-config '{"MinimumPollers": 5, "MaximumPollers": 100}'
```

Setelah mengonfigurasi mode yang disediakan, Anda dapat mengamati penggunaan poller peristiwa untuk beban kerja Anda dengan memantau metrik. `ProvisionedPollers` Untuk informasi selengkapnya, lihat Metrik pemetaan sumber peristiwa.

Untuk menonaktifkan mode yang disediakan dan kembali ke mode default (sesuai permintaan), Anda dapat menggunakan perintah CLI `UpdateEventSourceMapping` berikut:

```
aws lambda update-event-source-mapping \
    --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
    --provisioned-poller-config '{}'
```

**catatan**  
Mode yang disediakan tidak dapat digunakan bersamaan dengan pengaturan konkurensi maksimum. Saat menggunakan mode yang disediakan, Anda mengontrol konkurensi maksimum melalui jumlah maksimum poller acara.

Untuk informasi selengkapnya tentang mengonfigurasi mode yang disediakan, lihat. [Membuat dan mengonfigurasi pemetaan sumber peristiwa Amazon SQS](services-sqs-configure.md)

## Contoh acara pesan antrian standar
<a name="example-standard-queue-message-event"></a>

**Example Kejadian pesan Amazon SQS (antrean standar)**  

```
{
    "Records": [
        {
            "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
            "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
            "body": "Test message.",
            "attributes": {
                "ApproximateReceiveCount": "1",
                "SentTimestamp": "1545082649183",
                "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                "ApproximateFirstReceiveTimestamp": "1545082649185"
            },
            "messageAttributes": {
                "myAttribute": {
                    "stringValue": "myValue", 
                    "stringListValues": [], 
                    "binaryListValues": [], 
                    "dataType": "String"
                }
            },
            "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
            "eventSource": "aws:sqs",
            "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
            "awsRegion": "us-east-2"
        },
        {
            "messageId": "2e1424d4-f796-459a-8184-9c92662be6da",
            "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...",
            "body": "Test message.",
            "attributes": {
                "ApproximateReceiveCount": "1",
                "SentTimestamp": "1545082650636",
                "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                "ApproximateFirstReceiveTimestamp": "1545082650649"
            },
            "messageAttributes": {},
            "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
            "eventSource": "aws:sqs",
            "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
            "awsRegion": "us-east-2"
        }
    ]
}
```

Secara default, Lambda melakukan polling hingga 10 pesan dalam antrian sekaligus dan mengirimkan batch tersebut ke fungsi Anda. Untuk menghindari menjalankan fungsi dengan sejumlah kecil catatan, Anda dapat mengonfigurasi sumber peristiwa untuk menyangga catatan hingga 5 menit dengan mengonfigurasi jendela batch. Sebelum menjalankan fungsi, Lambda melanjutkan polling pesan dari antrian standar hingga jendela batch kedaluwarsa, kuota [ukuran payload pemanggilan tercapai, atau ukuran](gettingstarted-limits.md) batch maksimum yang dikonfigurasi tercapai.

Jika Anda menggunakan jendela batch dan antrian SQS Anda berisi lalu lintas yang sangat rendah, Lambda mungkin menunggu hingga 20 detik sebelum menjalankan fungsi Anda. Ini benar bahkan jika Anda mengatur jendela batch lebih rendah dari 20 detik. 

**catatan**  
Di Java, Anda mungkin mengalami kesalahan pointer null saat deserialisasi JSON. Ini bisa disebabkan oleh bagaimana kasus “Records” dan “EventSourcEarn” dikonversi oleh pemeta objek JSON.

## Contoh acara pesan antrian FIFO
<a name="sample-fifo-queues-message-event"></a>

Untuk antrean FIFO, rekaman berisi atribut tambahan yang terkait dengan deduplikasi dan pengurutan.

**Example Kejadian pesan Amazon SQS (antrean FIFO)**  

```
{
    "Records": [
        {
            "messageId": "11d6ee51-4cc7-4302-9e22-7cd8afdaadf5",
            "receiptHandle": "AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...",
            "body": "Test message.",
            "attributes": {
                "ApproximateReceiveCount": "1",
                "SentTimestamp": "1573251510774",
                "SequenceNumber": "18849496460467696128",
                "MessageGroupId": "1",
                "SenderId": "AIDAIO23YVJENQZJOL4VO",
                "MessageDeduplicationId": "1",
                "ApproximateFirstReceiveTimestamp": "1573251510774"
            },
            "messageAttributes": {},
            "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
            "eventSource": "aws:sqs",
            "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:fifo.fifo",
            "awsRegion": "us-east-2"
        }
    ]
}
```

# Membuat dan mengonfigurasi pemetaan sumber peristiwa Amazon SQS
<a name="services-sqs-configure"></a>

Untuk memproses pesan Amazon SQS dengan Lambda, konfigurasikan antrian Anda dengan pengaturan yang sesuai, lalu buat pemetaan sumber peristiwa Lambda.

**Topics**
+ [Mengonfigurasi antrean untuk digunakan dengan Lambda](#events-sqs-queueconfig)
+ [Menyiapkan izin peran eksekusi Lambda](#events-sqs-permissions)
+ [Membuat pemetaan sumber acara SQS](#events-sqs-eventsource)

## Mengonfigurasi antrean untuk digunakan dengan Lambda
<a name="events-sqs-queueconfig"></a>

Jika Anda belum memiliki antrean Amazon SQS yang ada, [buat](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-create-queue.html) antrean untuk berfungsi sebagai sumber acara untuk fungsi Lambda Anda. [Fungsi Lambda dan antrian Amazon SQS harus Wilayah AWS sama, meskipun bisa berbeda. Akun AWS](with-sqs-cross-account-example.md)

Untuk memungkinkan waktu fungsi Anda memproses setiap kumpulan rekaman, atur [batas waktu visibilitas](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) antrian sumber menjadi setidaknya enam kali batas [waktu konfigurasi](configuration-timeout.md) pada fungsi Anda. Waktu tambahan memungkinkan Lambda untuk mencoba lagi jika fungsi Anda dibatasi saat memproses batch sebelumnya.

**catatan**  
Batas waktu fungsi Anda harus kurang dari atau sama dengan batas waktu visibilitas antrian. Lambda memvalidasi persyaratan ini saat Anda membuat atau memperbarui pemetaan sumber peristiwa dan akan menampilkan kesalahan jika batas waktu fungsi melebihi batas waktu visibilitas antrian.

Secara default, jika Lambda menemukan kesalahan di titik mana pun saat memproses batch, semua pesan dalam batch tersebut kembali ke antrian. Setelah [batas waktu visibilitas](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html), pesan menjadi terlihat oleh Lambda lagi. Anda dapat mengonfigurasi pemetaan sumber peristiwa untuk menggunakan [respons batch sebagian](services-sqs-errorhandling.md#services-sqs-batchfailurereporting) agar hanya mengembalikan pesan yang gagal kembali ke antrian. Selain itu, jika fungsi Anda gagal memproses pesan beberapa kali, Amazon SQS dapat mengirimkannya ke antrian huruf [mati](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html). Sebaiknya setel [kebijakan redrive](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html#policies-for-dead-letter-queues) antrian sumber Anda ke setidaknya 5. `maxReceiveCount` Ini memberi Lambda beberapa kesempatan untuk mencoba lagi sebelum mengirim pesan yang gagal langsung ke antrian surat mati.

## Menyiapkan izin peran eksekusi Lambda
<a name="events-sqs-permissions"></a>

Kebijakan [ AWSLambdaSQSQueueExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaSQSQueueExecutionRole.html) AWS terkelola mencakup izin yang perlu dibaca Lambda dari antrean Amazon SQS Anda. Anda dapat menambahkan kebijakan terkelola ini ke [peran eksekusi](lambda-intro-execution-role.md) fungsi Anda.

Secara opsional, jika Anda menggunakan antrean terenkripsi, Anda juga perlu menambahkan izin berikut ke peran eksekusi Anda:
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)

## Membuat pemetaan sumber acara SQS
<a name="events-sqs-eventsource"></a>

Buat pemetaan sumber kejadian untuk memberi tahu Lambda agar mengirim item dari antrean Anda ke fungsi Lambda. Anda dapat membuat beberapa pemetaan sumber kejadian untuk memproses item dari beberapa antrean dengan satu fungsi. Ketika Lambda memanggil fungsi target, kejadian dapat berisi beberapa item, hingga *ukuran batch* maksimum yang dapat dikonfigurasi.

Untuk mengonfigurasi fungsi agar dibaca dari Amazon SQS, lampirkan kebijakan [ AWSLambdaSQSQueueExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaSQSQueueExecutionRole.html) AWS terkelola ke peran eksekusi Anda. Kemudian, buat pemetaan sumber peristiwa **SQS** dari konsol menggunakan langkah-langkah berikut.

**Untuk menambahkan izin dan membuat pemicu**

1. Buka [Halaman fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih nama sebuah fungsi.

1. Pilih tab **Konfigurasi**, lalu pilih **Izin**.

1. Di bawah **Nama peran**, pilih tautan ke peran eksekusi Anda. Tautan ini membuka peran di konsol IAM.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/execution-role.png)

1. Pilih **Tambahkan izin**, lalu pilih **Lampirkan kebijakan**.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/attach-policies.png)

1. Di bidang pencarian, masukkan`AWSLambdaSQSQueueExecutionRole`. Tambahkan kebijakan ini ke peran eksekusi Anda. Ini adalah kebijakan AWS terkelola yang berisi izin yang perlu dibaca fungsi Anda dari antrean Amazon SQS. Untuk informasi selengkapnya tentang kebijakan ini, lihat [ AWSLambdaSQSQueueExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaSQSQueueExecutionRole.html)di *Referensi Kebijakan AWS Terkelola*.

1. Kembali ke fungsi Anda di konsol Lambda. Di bagian **Gambaran umum fungsi**, pilih **Tambah pemicu**.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/add-trigger.png)

1. Pilih jenis pemicu.

1. Konfigurasikan opsi yang diperlukan, lalu pilih **Tambah**.

Lambda mendukung opsi konfigurasi berikut untuk sumber peristiwa Amazon SQS:

**Antrian SQS**  
Antrian Amazon SQS untuk membaca catatan dari. [Fungsi Lambda dan antrian Amazon SQS harus Wilayah AWS sama, meskipun bisa berbeda. Akun AWS](with-sqs-cross-account-example.md)

**Aktifkan pemicu**  
Status pemetaan sumber acara. **Aktifkan pemicu** dipilih secara default.

**Ukuran batch**  
Jumlah maksimum catatan untuk dikirim ke fungsi di setiap batch. Untuk antrian standar, ini bisa mencapai 10.000 catatan. Untuk antrian FIFO, maksimum adalah 10. Untuk ukuran batch lebih dari 10, Anda juga harus mengatur batch window (`MaximumBatchingWindowInSeconds`) setidaknya 1 detik.  
Konfigurasikan [batas waktu fungsi](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/configurations#timeouts) Anda untuk memberikan waktu yang cukup untuk memproses seluruh kumpulan item. Jika item membutuhkan waktu lama untuk diproses, pilih ukuran batch yang lebih kecil. Ukuran batch yang besar dapat meningkatkan efisiensi beban kerja yang sangat cepat atau memiliki banyak overhead. Jika Anda mengonfigurasi [konkurensi cadangan](configuration-concurrency.md) pada fungsi Anda, setel minimal lima eksekusi bersamaan untuk mengurangi kemungkinan kesalahan pelambatan saat Lambda memanggil fungsi Anda.  
Lambda meneruskan semua catatan dalam batch ke fungsi dalam satu panggilan, selama ukuran total peristiwa tidak melebihi [kuota ukuran payload pemanggilan untuk pemanggilan](gettingstarted-limits.md) sinkron (6 MB). Baik Lambda dan Amazon SQS menghasilkan metadata untuk setiap catatan. Metadata tambahan ini dihitung terhadap ukuran muatan total dan dapat menyebabkan jumlah total catatan yang dikirim dalam batch menjadi lebih rendah dari ukuran batch yang dikonfigurasi. Bidang metadata yang dikirimkan Amazon SQS dapat bervariasi panjangnya. Untuk informasi selengkapnya tentang bidang metadata Amazon SQS, lihat dokumentasi operasi [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)API di Referensi API Layanan *Antrian Sederhana Amazon*.

**Jendela batch**  
Jumlah waktu maksimum untuk mengumpulkan rekaman sebelum memanggil fungsi, dalam hitungan detik. Ini hanya berlaku untuk antrian standar.  
Jika Anda menggunakan jendela batch lebih dari 0 detik, Anda harus memperhitungkan peningkatan waktu pemrosesan dalam batas waktu [visibilitas](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) antrian Anda. Sebaiknya atur batas waktu visibilitas antrian Anda menjadi enam kali [batas waktu fungsi](configuration-timeout.md) Anda, ditambah nilai. `MaximumBatchingWindowInSeconds` Ini memungkinkan waktu untuk fungsi Lambda Anda memproses setiap batch peristiwa dan mencoba kembali jika terjadi kesalahan thrthrottling.  
Ketika pesan tersedia, Lambda mulai memproses pesan dalam batch. Lambda mulai memproses lima batch sekaligus dengan lima pemanggilan fungsi Anda secara bersamaan. Jika pesan masih tersedia, Lambda menambahkan hingga 300 pemanggilan fungsi secara bersamaan dalam satu menit, hingga maksimum 1.250 pemanggilan bersamaan. Saat menggunakan mode yang disediakan, setiap poller peristiwa dapat menangani hingga 1 throughput, hingga 10 MB/s pemanggilan bersamaan, atau hingga 10 panggilan API polling Amazon SQS per detik. Lambda menskalakan jumlah poller peristiwa antara minimum dan maksimum yang dikonfigurasi, dengan cepat menambahkan hingga 1.000 pemanggilan bersamaan per menit untuk menyediakan pemrosesan latensi rendah pada peristiwa Amazon SQS Anda. Anda mengontrol penskalaan dan konkurensi melalui pengaturan poller peristiwa minimum dan maksimum ini. Untuk mempelajari lebih lanjut tentang penskalaan fungsi dan konkurensi, lihat. [Memahami penskalaan fungsi Lambda](lambda-concurrency.md)  
Untuk memproses lebih banyak pesan, Anda dapat mengoptimalkan fungsi Lambda untuk throughput yang lebih tinggi. Untuk informasi selengkapnya, lihat [Memahami cara AWS Lambda menskalakan dengan antrian standar Amazon SQS](https://aws.amazon.com/blogs/compute/understanding-how-aws-lambda-scales-when-subscribed-to-amazon-sqs-queues/#:~:text=If there are more messages,messages from the SQS queue.).

**Kriteria filter**  
Tambahkan kriteria filter untuk mengontrol peristiwa yang dikirim Lambda ke fungsi Anda untuk diproses. Untuk informasi selengkapnya, lihat [Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md).

**Konkurensi maksimum**  
Jumlah maksimum fungsi bersamaan yang dapat dipanggil sumber peristiwa. Tidak dapat digunakan dengan Mode Penyediaan diaktifkan. Untuk informasi selengkapnya, lihat [Mengkonfigurasi konkurensi maksimum untuk sumber peristiwa Amazon SQS](services-sqs-scaling.md#events-sqs-max-concurrency).

**Mode yang Disediakan**  
Saat diaktifkan, alokasikan sumber daya polling khusus untuk pemetaan sumber acara Anda. Anda dapat mengonfigurasi jumlah poller acara minimum (2-200) dan maksimum (2-2000). Setiap event poller dapat menangani hingga 1 MB/sec throughput, hingga 10 pemanggilan bersamaan, atau hingga 10 panggilan API polling Amazon SQS per detik.  
Catatan: Anda tidak dapat menggunakan Provisioned Mode dan Maximum concurrency bersama-sama. Saat Mode Penyediaan diaktifkan, gunakan pengaturan poller maksimum untuk mengontrol konkurensi.

# Mengkonfigurasi perilaku penskalaan untuk pemetaan sumber peristiwa SQS
<a name="services-sqs-scaling"></a>

Anda dapat mengontrol perilaku penskalaan pemetaan sumber peristiwa Amazon SQS baik melalui pengaturan konkurensi maksimum atau dengan mengaktifkan mode yang disediakan. Ini adalah opsi yang saling eksklusif.

Secara default, Lambda secara otomatis menskalakan poller acara berdasarkan volume pesan. Saat mengaktifkan mode yang disediakan, Anda mengalokasikan jumlah minimum dan maksimum sumber daya polling khusus yang tetap siap menangani pola lalu lintas yang diharapkan. Ini memungkinkan Anda mengoptimalkan kinerja pemetaan sumber acara dengan dua cara:
+ Mode standar (Default): Lambda secara otomatis mengelola penskalaan, dimulai dengan sejumlah kecil poller dan penskalaan naik atau turun berdasarkan beban kerja.
+ Mode yang disediakan: Anda mengonfigurasi sumber daya polling khusus dengan batas minimum dan maksimum, memungkinkan penskalaan 3 kali lebih cepat dan kapasitas pemrosesan hingga 16 kali lebih tinggi.

Untuk antrian standar, Lambda menggunakan polling [panjang untuk melakukan polling](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling) antrian hingga menjadi aktif. Saat pesan tersedia, Lambda mulai memproses lima batch sekaligus dengan lima pemanggilan fungsi Anda secara bersamaan. Jika pesan masih tersedia, Lambda meningkatkan jumlah proses yang membaca batch hingga 300 pemanggilan bersamaan per menit. Jumlah maksimum pemanggilan yang dapat diproses oleh pemetaan sumber peristiwa secara bersamaan adalah 1.250. Ketika lalu lintas rendah, Lambda menskalakan kembali pemrosesan ke lima pemanggilan bersamaan, dan dapat mengoptimalkan sedikitnya 2 pemanggilan bersamaan untuk mengurangi panggilan Amazon SQS dan biaya terkait. Namun, pengoptimalan ini tidak tersedia saat Anda mengaktifkan pengaturan konkurensi maksimum.

Untuk antrean FIFO, Lambda mengirimkan pesan ke fungsi Anda sesuai urutan penerimaan. Saat Anda mengirimkan pesan ke antrean FIFO, Anda menentukan [ID grup pesan](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html). Amazon SQS memastikan bahwa pesan dalam grup yang sama dikirim ke Lambda secara berurutan. Saat Lambda membaca pesan Anda ke dalam batch, setiap batch mungkin berisi pesan dari lebih dari satu grup pesan, tetapi urutan pesan tetap terjaga. Jika fungsi Anda menampilkan kesalahan, fungsi akan mencoba semua percobaan ulang pada pesan yang terpengaruh sebelum Lambda menerima pesan tambahan dari grup yang sama.

Saat menggunakan mode yang disediakan, setiap poller peristiwa dapat menangani hingga 1 throughput, hingga 10 MB/sec pemanggilan bersamaan, atau hingga 10 panggilan API polling Amazon SQS per detik. Lambda menskalakan jumlah poller peristiwa antara minimum dan maksimum yang dikonfigurasi, dengan cepat menambahkan hingga 1.000 konkurensi per menit untuk menyediakan pemrosesan peristiwa Amazon SQS yang konsisten dan latensi rendah. Menggunakan mode yang disediakan menimbulkan biaya tambahan. Untuk harga terperinci, lihat [AWS Lambda harga](https://aws.amazon.com/lambda/pricing/). Setiap poller acara menggunakan [polling panjang](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) ke antrean SQS Anda hingga 10 polling per detik, yang menimbulkan biaya permintaan SQS API. Lihat [harga Amazon SQS untuk detailnya](https://aws.amazon.com/sqs/pricing/ ). Anda mengontrol penskalaan dan konkurensi melalui pengaturan poller peristiwa minimum dan maksimum ini, daripada menggunakan pengaturan konkurensi maksimum, karena opsi ini tidak dapat digunakan bersama.

**catatan**  
Anda tidak dapat menggunakan pengaturan konkurensi maksimum dan mode yang disediakan secara bersamaan. Saat mode yang disediakan diaktifkan, Anda mengontrol penskalaan dan konkurensi pemetaan sumber peristiwa Amazon SQS melalui jumlah minimum dan maksimum poller peristiwa.

## Mengkonfigurasi konkurensi maksimum untuk sumber peristiwa Amazon SQS
<a name="events-sqs-max-concurrency"></a>

Anda dapat menggunakan setelan konkurensi maksimum untuk mengontrol perilaku penskalaan untuk sumber peristiwa SQS Anda. Perhatikan bahwa konkurensi maksimum tidak dapat digunakan dengan mode yang disediakan diaktifkan. Setelan konkurensi maksimum membatasi jumlah instance bersamaan dari fungsi yang dapat dipanggil oleh sumber peristiwa Amazon SQS. Konkurensi maksimum adalah pengaturan tingkat sumber acara. Jika Anda memiliki beberapa sumber peristiwa Amazon SQS yang dipetakan ke satu fungsi, setiap sumber peristiwa dapat memiliki setelan konkurensi maksimum yang terpisah. Anda dapat menggunakan konkurensi maksimum untuk mencegah satu antrian menggunakan semua [konkurensi cadangan fungsi atau sisa kuota konkurensi](configuration-concurrency.md) [akun](gettingstarted-limits.md). Tidak ada biaya untuk mengonfigurasi konkurensi maksimum pada sumber acara Amazon SQS.

Yang penting, konkurensi maksimum dan konkurensi cadangan adalah dua pengaturan independen. Jangan menetapkan konkurensi maksimum yang lebih tinggi dari konkurensi cadangan fungsi. Jika Anda mengonfigurasi konkurensi maksimum, pastikan konkurensi cadangan fungsi Anda lebih besar dari atau sama dengan total konkurensi maksimum untuk semua sumber peristiwa Amazon SQS pada fungsi tersebut. Jika tidak, Lambda dapat membatasi pesan Anda.

Jika kuota konkurensi akun Anda disetel ke nilai default 1.000, pemetaan sumber peristiwa Amazon SQS dapat menskalakan untuk memanggil instance fungsi hingga nilai ini, kecuali Anda menentukan konkurensi maksimum.

Jika Anda menerima peningkatan kuota konkurensi default akun Anda, Lambda mungkin tidak dapat menjalankan instance fungsi bersamaan hingga kuota baru Anda. Secara default, Lambda dapat menskalakan untuk menjalankan hingga 1.250 instance fungsi bersamaan untuk pemetaan sumber peristiwa Amazon SQS. Jika ini tidak cukup untuk kasus penggunaan Anda, hubungi AWS dukungan untuk mendiskusikan peningkatan konkurensi pemetaan sumber peristiwa Amazon SQS akun Anda.

**catatan**  
Untuk antrian FIFO, pemanggilan bersamaan dibatasi oleh jumlah [grup pesan IDs](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html) (`messageGroupId`) atau pengaturan konkurensi maksimum—mana yang lebih rendah. Misalnya, jika Anda memiliki enam grup pesan IDs dan konkurensi maksimum disetel ke 10, fungsi Anda dapat memiliki maksimal enam pemanggilan bersamaan.

Anda dapat mengonfigurasi konkurensi maksimum pada pemetaan sumber peristiwa Amazon SQS baru dan yang sudah ada.

**Konfigurasikan konkurensi maksimum menggunakan konsol Lambda**

1. Buka [Halaman fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih nama sebuah fungsi.

1. Di bawah **Ikhtisar fungsi**, pilih **SQS.** Ini membuka tab **Konfigurasi**.

1. **Pilih pemicu Amazon SQS dan pilih Edit.**

1. Untuk **Konkurensi maksimum**, masukkan angka antara 2 dan 1.000. Untuk mematikan konkurensi maksimum, biarkan kotak kosong.

1. Pilih **Simpan**.

**Konfigurasikan konkurensi maksimum menggunakan AWS Command Line Interface ()AWS CLI**  
Gunakan perintah [update-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html) dengan opsi `--scaling-config`. Contoh:

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --scaling-config '{"MaximumConcurrency":5}'
```

Untuk mematikan konkurensi maksimum, masukkan nilai kosong untuk`--scaling-config`:

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --scaling-config "{}"
```

**Konfigurasikan konkurensi maksimum menggunakan API Lambda**  
Gunakan [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)atau [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)tindakan dengan [ScalingConfig](https://docs.aws.amazon.com/lambda/latest/api/API_ScalingConfig.html)objek.

# Menangani kesalahan untuk sumber peristiwa SQS di Lambda
<a name="services-sqs-errorhandling"></a>

Untuk menangani kesalahan yang terkait dengan sumber peristiwa SQS, Lambda secara otomatis menggunakan strategi coba lagi dengan strategi backoff. Anda juga dapat menyesuaikan perilaku penanganan kesalahan dengan mengonfigurasi pemetaan sumber peristiwa SQS Anda untuk mengembalikan respons batch [sebagian](#services-sqs-batchfailurereporting).

## Strategi backoff untuk pemanggilan yang gagal
<a name="services-sqs-backoff-strategy"></a>

Ketika pemanggilan gagal, Lambda mencoba lagi pemanggilan sambil menerapkan strategi backoff. Strategi backoff sedikit berbeda tergantung pada apakah Lambda mengalami kegagalan karena kesalahan dalam kode fungsi Anda, atau karena pelambatan.
+  Jika **kode fungsi** Anda menyebabkan kesalahan, Lambda akan berhenti memproses dan mencoba kembali pemanggilan. Sementara itu, Lambda secara bertahap mundur, mengurangi jumlah konkurensi yang dialokasikan ke pemetaan sumber peristiwa Amazon SQS Anda. Setelah batas waktu visibilitas antrian Anda habis, pesan akan muncul kembali dalam antrian. 
+ Jika pemanggilan gagal karena pelambatan, **Lambda** secara bertahap menghentikan percobaan ulang dengan mengurangi jumlah konkurensi yang dialokasikan ke pemetaan sumber peristiwa Amazon SQS Anda. Lambda terus mencoba lagi pesan hingga stempel waktu pesan melebihi batas waktu visibilitas antrian Anda, di mana Lambda menghapus pesan.

## Menerapkan tanggapan batch sebagian
<a name="services-sqs-batchfailurereporting"></a>

Saat fungsi Lambda Anda mengalami kesalahan saat memproses batch, semua pesan dalam kumpulan tersebut akan terlihat lagi dalam antrian secara default, termasuk pesan yang berhasil diproses Lambda. Akibatnya, fungsi Anda akhirnya dapat memproses pesan yang sama beberapa kali.

Untuk menghindari pemrosesan ulang pesan yang berhasil diproses dalam kumpulan yang gagal, Anda dapat mengonfigurasi pemetaan sumber peristiwa agar hanya pesan yang gagal terlihat lagi. Ini disebut respon batch paral. Untuk mengaktifkan respons batch sebagian, tentukan `ReportBatchItemFailures` [FunctionResponseTypes](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html#lambda-UpdateEventSourceMapping-request-FunctionResponseTypes)tindakan saat mengonfigurasi pemetaan sumber peristiwa Anda. Ini memungkinkan fungsi Anda mengembalikan sebagian keberhasilan, yang dapat membantu mengurangi jumlah percobaan ulang yang tidak perlu pada catatan.

**catatan**  
[Utilitas Prosesor Batch](https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/) dari Powertools untuk AWS Lambda menangani semua logika respons batch paral secara otomatis. Utilitas ini menyederhanakan penerapan pola pemrosesan batch dan mengurangi kode khusus yang diperlukan untuk menangani kegagalan item batch dengan benar. Ini tersedia untuk Python, Java, TypeScript, dan .NET.

Saat `ReportBatchItemFailures` diaktifkan, Lambda tidak [mengurangi polling pesan saat pemanggilan](#services-sqs-backoff-strategy) fungsi gagal. Jika Anda mengharapkan beberapa pesan gagal—dan Anda tidak ingin kegagalan tersebut memengaruhi laju pemrosesan pesan—gunakan. `ReportBatchItemFailures`

**catatan**  
Ingatlah hal berikut saat menggunakan respons batch sebagian:  
Jika fungsi Anda melempar pengecualian, seluruh batch dianggap gagal total.
Jika Anda menggunakan fitur ini dengan antrian FIFO, fungsi Anda harus berhenti memproses pesan setelah kegagalan pertama dan mengembalikan semua pesan yang gagal dan belum diproses. `batchItemFailures` Ini membantu menjaga urutan pesan dalam antrian Anda.

**Untuk mengaktifkan pelaporan batch sebagian**

1. Tinjau [Praktik terbaik untuk mengimplementasikan respons batch sebagian](https://docs.aws.amazon.com/prescriptive-guidance/latest/lambda-event-filtering-partial-batch-responses-for-sqs/best-practices-partial-batch-responses.html).

1. Jalankan perintah berikut `ReportBatchItemFailures` untuk mengaktifkan fungsi Anda. Untuk mengambil UUID pemetaan sumber acara Anda, jalankan perintah. [list-event-source-mappings](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html) AWS CLI 

   ```
   aws lambda update-event-source-mapping \
   --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
   --function-response-types "ReportBatchItemFailures"
   ```

1. Perbarui kode fungsi Anda untuk menangkap semua pengecualian dan mengembalikan pesan yang gagal dalam respons `batchItemFailures` JSON. `batchItemFailures`Respons harus menyertakan daftar pesan IDs, sebagai nilai `itemIdentifier` JSON.

   Misalnya, Anda memiliki sekumpulan lima pesan, dengan pesan IDs `id1`,,`id2`, `id3``id4`, dan`id5`. Fungsi Anda berhasil memproses`id1`,`id3`, dan`id5`. Untuk membuat pesan `id2` dan `id4` terlihat lagi dalam antrian Anda, fungsi Anda harus mengembalikan respons berikut: 

   ```
   { 
     "batchItemFailures": [ 
           {
               "itemIdentifier": "id2"
           },
           {
               "itemIdentifier": "id4"
           }
       ]
   }
   ```

   Berikut adalah beberapa contoh kode fungsi yang mengembalikan daftar pesan gagal IDs dalam batch:

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan.NET.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   using Amazon.Lambda.Core;
   using Amazon.Lambda.SQSEvents;
   
   // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
   [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
   namespace sqsSample;
   
   public class Function
   {
       public async Task<SQSBatchResponse> FunctionHandler(SQSEvent evnt, ILambdaContext context)
       {
           List<SQSBatchResponse.BatchItemFailure> batchItemFailures = new List<SQSBatchResponse.BatchItemFailure>();
           foreach(var message in evnt.Records)
           {
               try
               {
                   //process your message
                   await ProcessMessageAsync(message, context);
               }
               catch (System.Exception)
               {
                   //Add failed message identifier to the batchItemFailures list
                   batchItemFailures.Add(new SQSBatchResponse.BatchItemFailure{ItemIdentifier=message.MessageId}); 
               }
           }
           return new SQSBatchResponse(batchItemFailures);
       }
   
       private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context)
       {
           if (String.IsNullOrEmpty(message.Body))
           {
               throw new Exception("No Body in SQS Message.");
           }
           context.Logger.LogInformation($"Processed message {message.Body}");
           // TODO: Do interesting work based on the new message
           await Task.CompletedTask;
       }
   }
   ```

------
#### [ Go ]

**SDK untuk Go V2**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan Go.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   package main
   
   import (
   	"context"
   	"fmt"
   	"github.com/aws/aws-lambda-go/events"
   	"github.com/aws/aws-lambda-go/lambda"
   )
   
   func handler(ctx context.Context, sqsEvent events.SQSEvent) (map[string]interface{}, error) {
   	batchItemFailures := []map[string]interface{}{}
   
   	for _, message := range sqsEvent.Records {
   		if len(message.Body) > 0 {
   			// Your message processing condition here
   			fmt.Printf("Successfully processed message: %s\n", message.Body)
   		} else {
   			// Message processing failed
   			fmt.Printf("Failed to process message %s\n", message.MessageId)
   			batchItemFailures = append(batchItemFailures, map[string]interface{}{"itemIdentifier": message.MessageId})
   		}
   	}
   
   	sqsBatchResponse := map[string]interface{}{
   		"batchItemFailures": batchItemFailures,
   	}
   	return sqsBatchResponse, nil
   }
   
   func main() {
   	lambda.Start(handler)
   }
   ```

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan Java.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   import com.amazonaws.services.lambda.runtime.Context;
   import com.amazonaws.services.lambda.runtime.RequestHandler;
   import com.amazonaws.services.lambda.runtime.events.SQSEvent;
   import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse;
    
   import java.util.ArrayList;
   import java.util.List;
    
   public class ProcessSQSMessageBatch implements RequestHandler<SQSEvent, SQSBatchResponse> {
       @Override
       public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) {
            List<SQSBatchResponse.BatchItemFailure> batchItemFailures = new ArrayList<SQSBatchResponse.BatchItemFailure>();
   
            for (SQSEvent.SQSMessage message : sqsEvent.getRecords()) {
                try {
                    //process your message
                } catch (Exception e) {
                    //Add failed message identifier to the batchItemFailures list
                    batchItemFailures.add(new SQSBatchResponse.BatchItemFailure(message.getMessageId()));
                }
            }
            return new SQSBatchResponse(batchItemFailures);
        }
   }
   ```

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan penggunaan JavaScript Lambda.  

   ```
   // Node.js 20.x Lambda runtime, AWS SDK for Javascript V3
   export const handler = async (event, context) => {
       const batchItemFailures = [];
       for (const record of event.Records) {
           try {
               await processMessageAsync(record, context);
           } catch (error) {
               batchItemFailures.push({ itemIdentifier: record.messageId });
           }
       }
       return { batchItemFailures };
   };
   
   async function processMessageAsync(record, context) {
       if (record.body && record.body.includes("error")) {
           throw new Error("There is an error in the SQS Message.");
       }
       console.log(`Processed message: ${record.body}`);
   }
   ```
Melaporkan kegagalan item batch SQS dengan penggunaan TypeScript Lambda.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   import { SQSEvent, SQSBatchResponse, Context, SQSBatchItemFailure, SQSRecord } from 'aws-lambda';
   
   export const handler = async (event: SQSEvent, context: Context): Promise<SQSBatchResponse> => {
       const batchItemFailures: SQSBatchItemFailure[] = [];
   
       for (const record of event.Records) {
           try {
               await processMessageAsync(record);
           } catch (error) {
               batchItemFailures.push({ itemIdentifier: record.messageId });
           }
       }
   
       return {batchItemFailures: batchItemFailures};
   };
   
   async function processMessageAsync(record: SQSRecord): Promise<void> {
       if (record.body && record.body.includes("error")) {
           throw new Error('There is an error in the SQS Message.');
       }
       console.log(`Processed message ${record.body}`);
   }
   ```

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan PHP.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   <?php
   
   use Bref\Context\Context;
   use Bref\Event\Sqs\SqsEvent;
   use Bref\Event\Sqs\SqsHandler;
   use Bref\Logger\StderrLogger;
   
   require __DIR__ . '/vendor/autoload.php';
   
   class Handler extends SqsHandler
   {
       private StderrLogger $logger;
       public function __construct(StderrLogger $logger)
       {
           $this->logger = $logger;
       }
   
       /**
        * @throws JsonException
        * @throws \Bref\Event\InvalidLambdaEvent
        */
       public function handleSqs(SqsEvent $event, Context $context): void
       {
           $this->logger->info("Processing SQS records");
           $records = $event->getRecords();
   
           foreach ($records as $record) {
               try {
                   // Assuming the SQS message is in JSON format
                   $message = json_decode($record->getBody(), true);
                   $this->logger->info(json_encode($message));
                   // TODO: Implement your custom processing logic here
               } catch (Exception $e) {
                   $this->logger->error($e->getMessage());
                   // failed processing the record
                   $this->markAsFailed($record);
               }
           }
           $totalRecords = count($records);
           $this->logger->info("Successfully processed $totalRecords SQS records");
       }
   }
   
   $logger = new StderrLogger();
   return new Handler($logger);
   ```

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan Python.  

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   def lambda_handler(event, context):
       if event:
           batch_item_failures = []
           sqs_batch_response = {}
        
           for record in event["Records"]:
               try:
                   print(f"Processed message: {record['body']}")
               except Exception as e:
                   batch_item_failures.append({"itemIdentifier": record['messageId']})
           
           sqs_batch_response["batchItemFailures"] = batch_item_failures
           return sqs_batch_response
   ```

------
#### [ Ruby ]

**SDK untuk Ruby**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda-with-batch-item-handling). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan Ruby.  

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   require 'json'
   
   def lambda_handler(event:, context:)
     if event
       batch_item_failures = []
       sqs_batch_response = {}
   
       event["Records"].each do |record|
         begin
           # process message
         rescue StandardError => e
           batch_item_failures << {"itemIdentifier" => record['messageId']}
         end
       end
   
       sqs_batch_response["batchItemFailures"] = batch_item_failures
       return sqs_batch_response
     end
   end
   ```

------
#### [ Rust ]

**SDK for Rust**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/lambda-function-sqs-report-batch-item-failures). 
Melaporkan kegagalan item batch SQS dengan Lambda menggunakan Rust.  

   ```
   // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   // SPDX-License-Identifier: Apache-2.0
   use aws_lambda_events::{
       event::sqs::{SqsBatchResponse, SqsEvent},
       sqs::{BatchItemFailure, SqsMessage},
   };
   use lambda_runtime::{run, service_fn, Error, LambdaEvent};
   
   async fn process_record(_: &SqsMessage) -> Result<(), Error> {
       Err(Error::from("Error processing message"))
   }
   
   async fn function_handler(event: LambdaEvent<SqsEvent>) -> Result<SqsBatchResponse, Error> {
       let mut batch_item_failures = Vec::new();
       for record in event.payload.records {
           match process_record(&record).await {
               Ok(_) => (),
               Err(_) => batch_item_failures.push(BatchItemFailure {
                   item_identifier: record.message_id.unwrap(),
               }),
           }
       }
   
       Ok(SqsBatchResponse {
           batch_item_failures,
       })
   }
   
   #[tokio::main]
   async fn main() -> Result<(), Error> {
       run(service_fn(function_handler)).await
   }
   ```

------

Jika peristiwa gagal tidak kembali ke antrian, lihat [Bagaimana cara memecahkan masalah fungsi Lambda](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-sqs-report-batch-item-failures/) SQS? ReportBatchItemFailures di pusat AWS pengetahuan.

### Status berhasil dan gagal
<a name="sqs-batchfailurereporting-conditions"></a>

Lambda memperlakukan batch sebagai sukses total jika fungsi Anda mengembalikan salah satu dari berikut ini:
+ Daftar `batchItemFailures` kosong
+ Daftar `batchItemFailures` nol
+ `EventResponse` kosong
+ `EventResponse` nol

Lambda memperlakukan batch sebagai kegagalan total jika fungsi Anda mengembalikan salah satu dari berikut ini:
+ Respons JSON yang tidak valid
+ String `itemIdentifier` kosong
+ `itemIdentifier` nol
+ `itemIdentifier` dengan nama kunci yang buruk
+ `itemIdentifier`Nilai dengan ID pesan yang tidak ada

### CloudWatch metrik
<a name="sqs-batchfailurereporting-metrics"></a>

Untuk menentukan apakah fungsi Anda melaporkan kegagalan item batch dengan benar, Anda dapat memantau metrik `ApproximateAgeOfOldestMessage` Amazon SQS `NumberOfMessagesDeleted` dan Amazon di Amazon. CloudWatch
+ `NumberOfMessagesDeleted`melacak jumlah pesan yang dihapus dari antrian Anda. Jika ini turun ke 0, ini adalah tanda bahwa respons fungsi Anda tidak mengembalikan pesan yang gagal dengan benar.
+ `ApproximateAgeOfOldestMessage`melacak berapa lama pesan tertua telah tinggal di antrian Anda. Peningkatan tajam dalam metrik ini dapat menunjukkan bahwa fungsi Anda tidak mengembalikan pesan yang gagal dengan benar.

### Menggunakan Powertools untuk prosesor AWS Lambda batch
<a name="services-sqs-batchfailurereporting-powertools"></a>

Utilitas prosesor batch dari Powertools untuk AWS Lambda secara otomatis menangani logika respons batch paral, mengurangi kompleksitas penerapan pelaporan kegagalan batch. Berikut adalah contoh menggunakan prosesor batch:

**Python**  
Untuk contoh lengkap dan petunjuk penyiapan, lihat [dokumentasi prosesor batch](https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/).
Memproses pesan Amazon SQS dengan prosesor AWS Lambda batch.  

```
import json
from aws_lambda_powertools import Logger
from aws_lambda_powertools.utilities.batch import BatchProcessor, EventType, process_partial_response
from aws_lambda_powertools.utilities.data_classes import SQSEvent
from aws_lambda_powertools.utilities.typing import LambdaContext

processor = BatchProcessor(event_type=EventType.SQS)
logger = Logger()

def record_handler(record):
    logger.info(record)
    # Your business logic here
    # Raise an exception to mark this record as failed
    
def lambda_handler(event, context: LambdaContext):
    return process_partial_response(
        event=event, 
        record_handler=record_handler, 
        processor=processor,
        context=context
    )
```

**TypeScript**  
Untuk contoh lengkap dan petunjuk penyiapan, lihat [dokumentasi prosesor batch](https://docs.aws.amazon.com/powertools/typescript/latest/features/batch/).
Memproses pesan Amazon SQS dengan prosesor AWS Lambda batch.  

```
import { BatchProcessor, EventType, processPartialResponse } from '@aws-lambda-powertools/batch';
import { Logger } from '@aws-lambda-powertools/logger';
import type { SQSEvent, Context } from 'aws-lambda';

const processor = new BatchProcessor(EventType.SQS);
const logger = new Logger();

const recordHandler = async (record: any): Promise<void> => {
    logger.info('Processing record', { record });
    // Your business logic here
    // Throw an error to mark this record as failed
};

export const handler = async (event: SQSEvent, context: Context) => {
    return processPartialResponse(event, recordHandler, processor, {
        context,
    });
};
```

# Parameter Lambda untuk pemetaan sumber peristiwa Amazon SQS
<a name="services-sqs-parameters"></a>

Semua jenis sumber peristiwa Lambda berbagi operasi yang sama [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)dan [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)API. Namun, hanya beberapa parameter yang berlaku untuk Amazon SQS.


| Parameter | Diperlukan | Default | Catatan | 
| --- | --- | --- | --- | 
|  BatchSize  |  T  |  10  |  Untuk antrian standar, maksimum 10.000. Untuk antrian FIFO, maksimum adalah 10.  | 
|  Diaktifkan  |  T  |  true  | none  | 
|  EventSourceArn  |  Y  | N/A |  ARN dari aliran data atau konsumen aliran  | 
|  FunctionName  |  Y  | N/A  | none  | 
|  FilterCriteria  |  T  |  N/A   |  [Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md)  | 
|  FunctionResponseTypes  |  T  | N/A  |  Agar fungsi Anda melaporkan kegagalan tertentu dalam satu batch, sertakan nilainya `ReportBatchItemFailures``FunctionResponseTypes`. Untuk informasi selengkapnya, lihat [Menerapkan tanggapan batch sebagian](services-sqs-errorhandling.md#services-sqs-batchfailurereporting).  | 
|  MaximumBatchingWindowInSeconds  |  T  |  0  | Jendela batching tidak didukung untuk antrian FIFO | 
|  ProvisionedPollerConfig  |  T  |  N/A  |  Mengkonfigurasi jumlah minimum (2-200) dan maksimum (2-2000) poller acara khusus untuk pemetaan sumber peristiwa SQS. Setiap poller dapat menangani hingga 1 throughput dan 10 MB/sec pemanggilan bersamaan.  | 
|  ScalingConfig  |  T  |  N/A   |  [Mengkonfigurasi konkurensi maksimum untuk sumber peristiwa Amazon SQS](services-sqs-scaling.md#events-sqs-max-concurrency)  | 

# Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS
<a name="with-sqs-filtering"></a>

Anda dapat menggunakan pemfilteran peristiwa untuk mengontrol rekaman mana dari aliran atau antrian yang dikirim Lambda ke fungsi Anda. Untuk informasi umum tentang cara kerja penyaringan acara, lihat[Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md).

Bagian ini berfokus pada pemfilteran acara untuk sumber acara Amazon SQS.

**catatan**  
Pemetaan sumber peristiwa Amazon SQS hanya mendukung pemfilteran pada kunci. `body`

**Topics**
+ [Dasar-dasar pemfilteran acara Amazon SQS](#filtering-SQS)

## Dasar-dasar pemfilteran acara Amazon SQS
<a name="filtering-SQS"></a>

Misalkan antrian Amazon SQS Anda berisi pesan dalam format JSON berikut.

```
{
    "RecordNumber": 1234,
    "TimeStamp": "yyyy-mm-ddThh:mm:ss",
    "RequestCode": "AAAA"
}
```

Contoh catatan untuk antrian ini akan terlihat sebagai berikut.

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
        },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue",
    "awsRegion": "us-west-2"
}
```

Untuk memfilter berdasarkan konten pesan Amazon SQS Anda, gunakan `body` kunci dalam catatan pesan Amazon SQS. Misalkan Anda hanya ingin memproses catatan tersebut di mana pesan Amazon SQS Anda adalah “BBBB.” `RequestCode` `FilterCriteria`Objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa. 

```
{
    "body": {
        "RequestCode": [ "BBBB" ]
        }
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "body" : { "RequestCode" : [ "BBBB" ] } }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMB untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "body" : { "RequestCode" : [ "BBBB" ] } }'
```

------

Misalkan Anda ingin fungsi Anda memproses hanya catatan yang `RecordNumber` lebih besar dari 9999. `FilterCriteria`Objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa. 

```
{
    "body": {
        "RecordNumber": [
            {
                "numeric": [ ">", 9999 ]
            }
        ]
    }
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMB untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }'
```

------

Untuk Amazon SQS, isi pesan dapat berupa string apa pun. Namun, ini bisa menjadi masalah jika Anda `FilterCriteria` `body` berharap berada dalam format JSON yang valid. Skenario sebaliknya juga benar—jika isi pesan yang masuk dalam format JSON tetapi kriteria filter Anda diharapkan menjadi string biasa, ini dapat `body` menyebabkan perilaku yang tidak diinginkan.

Untuk menghindari masalah ini, pastikan bahwa format isi dalam Anda `FilterCriteria` cocok dengan format yang diharapkan `body` dalam pesan yang Anda terima dari antrian Anda. Sebelum memfilter pesan Anda, Lambda secara otomatis mengevaluasi format badan pesan masuk dan pola filter Anda. `body` Jika ada ketidakcocokan, Lambda menjatuhkan pesan. Tabel berikut merangkum evaluasi ini:


| Format pesan `body` masuk | `body`Format pola filter | Tindakan yang dihasilkan | 
| --- | --- | --- | 
|  Tali polos  |  Tali polos  |  Filter Lambda berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  JSON yang valid  |  Lambda menjatuhkan pesan.  | 
|  JSON yang valid  |  Tali polos  |  Lambda menjatuhkan pesan.  | 
|  JSON yang valid  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  JSON yang valid  |  Filter Lambda berdasarkan kriteria filter Anda.  | 

# Tutorial: Menggunakan Lambda dengan Amazon SQS
<a name="with-sqs-example"></a>

Dalam tutorial ini, Anda membuat fungsi Lambda yang menggunakan pesan dari antrian [Amazon Simple Queue Service (Amazon](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) SQS). Fungsi Lambda berjalan setiap kali pesan baru ditambahkan ke antrian. Fungsi ini menulis pesan ke aliran Amazon CloudWatch Logs. Diagram berikut menunjukkan sumber daya AWS yang Anda gunakan untuk menyelesaikan tutorial.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_resources.png)


Untuk menyelesaikan tutorial ini, Anda melakukan langkah-langkah berikut:

1. Buat fungsi Lambda yang menulis pesan ke CloudWatch Log.

1. Membuat antrean Amazon SQS.

1. Buat pemetaan sumber acara Lambda. Pemetaan sumber peristiwa membaca antrian Amazon SQS dan memanggil fungsi Lambda Anda saat pesan baru ditambahkan.

1. Uji penyiapan dengan menambahkan pesan ke antrian Anda dan pantau hasilnya di CloudWatch Log.

## Prasyarat
<a name="with-sqs-prepare"></a>

### Instal AWS Command Line Interface
<a name="install_aws_cli"></a>

Jika Anda belum menginstal AWS Command Line Interface, ikuti langkah-langkah di [Menginstal atau memperbarui versi terbaru AWS CLI untuk menginstalnya](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Tutorial ini membutuhkan terminal baris perintah atau shell untuk menjalankan perintah. Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.

**catatan**  
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (`zip`seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, [instal Windows Subsystem untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) Linux. 

## Buat peran eksekusi
<a name="with-sqs-create-execution-role"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps1.png)


Peran [eksekusi adalah peran](lambda-intro-execution-role.md) AWS Identity and Access Management (IAM) yang memberikan izin fungsi Lambda untuk mengakses dan sumber daya. Layanan AWS Untuk mengizinkan fungsi Anda membaca item dari Amazon SQS, lampirkan kebijakan **AWSLambdaSQSQueueExecutionRole**izin.

**Untuk membuat peran eksekusi dan melampirkan kebijakan izin Amazon SQS**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih **Buat peran**.

1. Untuk **jenis entitas Tepercaya**, pilih **AWS layanan**.

1. Untuk **kasus penggunaan**, pilih **Lambda**.

1. Pilih **Berikutnya**.

1. Di kotak pencarian **Kebijakan izin**, masukkan**AWSLambdaSQSQueueExecutionRole**.

1. Pilih **AWSLambdaSQSQueueExecutionRole**kebijakan, lalu pilih **Berikutnya**.

1. Di bawah **Rincian peran****, untuk nama Peran****lambda-sqs-role**, masukkan, lalu pilih **Buat peran**.

Setelah pembuatan peran, catat Nama Sumber Daya Amazon (ARN) peran eksekusi Anda. Anda akan membutuhkannya di langkah selanjutnya.

## Buat fungsi
<a name="with-sqs-create-function"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps2.png)


Buat fungsi Lambda yang memproses pesan Amazon SQS Anda. Kode fungsi mencatat isi pesan Amazon SQS ke CloudWatch Log.

Tutorial ini menggunakan runtime Node.js 24, tetapi kami juga menyediakan kode contoh dalam bahasa runtime lainnya. Anda dapat memilih tab di kotak berikut untuk melihat kode runtime yang Anda minati. JavaScript Kode yang akan Anda gunakan dalam langkah ini adalah pada contoh pertama yang ditunjukkan di **JavaScript**tab.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan.NET.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
﻿using Amazon.Lambda.Core;
using Amazon.Lambda.SQSEvents;


// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace SqsIntegrationSampleCode
{
    public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context)
    {
        foreach (var message in evnt.Records)
        {
            await ProcessMessageAsync(message, context);
        }

        context.Logger.LogInformation("done");
    }

    private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context)
    {
        try
        {
            context.Logger.LogInformation($"Processed message {message.Body}");

            // TODO: Do interesting work based on the new message
            await Task.CompletedTask;
        }
        catch (Exception e)
        {
            //You can use Dead Letter Queue to handle failures. By configuring a Lambda DLQ.
            context.Logger.LogError($"An error occurred");
            throw;
        }

    }
}
```

------
#### [ Go ]

**SDK untuk Go V2**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan Go.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package integration_sqs_to_lambda

import (
	"fmt"
	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
)

func handler(event events.SQSEvent) error {
	for _, record := range event.Records {
		err := processMessage(record)
		if err != nil {
			return err
		}
	}
	fmt.Println("done")
	return nil
}

func processMessage(record events.SQSMessage) error {
	fmt.Printf("Processed message %s\n", record.Body)
	// TODO: Do interesting work based on the new message
	return nil
}

func main() {
	lambda.Start(handler)
}
```

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan Java.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;

public class Function implements RequestHandler<SQSEvent, Void> {
    @Override
    public Void handleRequest(SQSEvent sqsEvent, Context context) {
        for (SQSMessage msg : sqsEvent.getRecords()) {
            processMessage(msg, context);
        }
        context.getLogger().log("done");
        return null;
    }

    private void processMessage(SQSMessage msg, Context context) {
        try {
            context.getLogger().log("Processed message " + msg.getBody());

            // TODO: Do interesting work based on the new message

        } catch (Exception e) {
            context.getLogger().log("An error occurred");
            throw e;
        }

    }
}
```

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/blob/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan JavaScript Lambda menggunakan.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
exports.handler = async (event, context) => {
  for (const message of event.Records) {
    await processMessageAsync(message);
  }
  console.info("done");
};

async function processMessageAsync(message) {
  try {
    console.log(`Processed message ${message.body}`);
    // TODO: Do interesting work based on the new message
    await Promise.resolve(1); //Placeholder for actual async work
  } catch (err) {
    console.error("An error occurred");
    throw err;
  }
}
```
Mengkonsumsi acara SQS dengan TypeScript Lambda menggunakan.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { SQSEvent, Context, SQSHandler, SQSRecord } from "aws-lambda";

export const functionHandler: SQSHandler = async (
  event: SQSEvent,
  context: Context
): Promise<void> => {
  for (const message of event.Records) {
    await processMessageAsync(message);
  }
  console.info("done");
};

async function processMessageAsync(message: SQSRecord): Promise<any> {
  try {
    console.log(`Processed message ${message.body}`);
    // TODO: Do interesting work based on the new message
    await Promise.resolve(1); //Placeholder for actual async work
  } catch (err) {
    console.error("An error occurred");
    throw err;
  }
}
```

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan PHP.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
<?php

# using bref/bref and bref/logger for simplicity

use Bref\Context\Context;
use Bref\Event\InvalidLambdaEvent;
use Bref\Event\Sqs\SqsEvent;
use Bref\Event\Sqs\SqsHandler;
use Bref\Logger\StderrLogger;

require __DIR__ . '/vendor/autoload.php';

class Handler extends SqsHandler
{
    private StderrLogger $logger;
    public function __construct(StderrLogger $logger)
    {
        $this->logger = $logger;
    }

    /**
     * @throws InvalidLambdaEvent
     */
    public function handleSqs(SqsEvent $event, Context $context): void
    {
        foreach ($event->getRecords() as $record) {
            $body = $record->getBody();
            // TODO: Do interesting work based on the new message
        }
    }
}

$logger = new StderrLogger();
return new Handler($logger);
```

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan Python.  

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
def lambda_handler(event, context):
    for message in event['Records']:
        process_message(message)
    print("done")

def process_message(message):
    try:
        print(f"Processed message {message['body']}")
        # TODO: Do interesting work based on the new message
    except Exception as err:
        print("An error occurred")
        raise err
```

------
#### [ Ruby ]

**SDK untuk Ruby**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan Ruby.  

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
def lambda_handler(event:, context:)
  event['Records'].each do |message|
    process_message(message)
  end
  puts "done"
end

def process_message(message)
  begin
    puts "Processed message #{message['body']}"
    # TODO: Do interesting work based on the new message
  rescue StandardError => err
    puts "An error occurred"
    raise err
  end
end
```

------
#### [ Rust ]

**SDK for Rust**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-sqs-to-lambda). 
Mengkonsumsi acara SQS dengan Lambda menggunakan Rust.  

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
use aws_lambda_events::event::sqs::SqsEvent;
use lambda_runtime::{run, service_fn, Error, LambdaEvent};

async fn function_handler(event: LambdaEvent<SqsEvent>) -> Result<(), Error> {
    event.payload.records.iter().for_each(|record| {
        // process the record
        tracing::info!("Message body: {}", record.body.as_deref().unwrap_or_default())
    });

    Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::INFO)
        // disable printing the name of the module in every log line.
        .with_target(false)
        // disabling time is handy because CloudWatch will add the ingestion time.
        .without_time()
        .init();

    run(service_fn(function_handler)).await
}
```

------

**Untuk membuat fungsi Lambda Node.js**

1. Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.

   ```
   mkdir sqs-tutorial
   cd sqs-tutorial
   ```

1. Salin JavaScript kode sampel ke file baru bernama`index.js`.

1. Buat paket penyebaran menggunakan `zip` perintah berikut.

   ```
   zip function.zip index.js
   ```

1. Buat fungsi Lambda menggunakan perintah [AWS CLI create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html). Untuk parameter `role`, masukkan ARN peran eksekusi yang Anda buat sebelumnya.
**catatan**  
Fungsi Lambda dan antrean Amazon SQS harus sama. Wilayah AWS

   ```
   aws lambda create-function --function-name ProcessSQSRecord \
   --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \
   --role arn:aws:iam::111122223333:role/lambda-sqs-role
   ```

## Uji fungsi
<a name="with-sqs-create-test-function"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps3.png)


Memanggil fungsi Lambda Anda secara manual menggunakan `invoke` AWS CLI perintah dan contoh peristiwa Amazon SQS.

**Untuk memanggil fungsi Lambda dengan contoh peristiwa**

1. Simpan JSON berikut sebagai file bernama`input.json`. JSON ini mensimulasikan peristiwa yang mungkin dikirimkan Amazon SQS ke fungsi Lambda Anda, yang berisi pesan aktual dari `"body"` antrian. Dalam contoh ini, pesannya adalah`"test"`.  
**Example Acara Amazon SQS**  

   Ini adalah acara pengujian—Anda tidak perlu mengubah pesan atau nomor akun.

   ```
   {
       "Records": [
           {
               "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
               "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
               "body": "test",
               "attributes": {
                   "ApproximateReceiveCount": "1",
                   "SentTimestamp": "1545082649183",
                   "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                   "ApproximateFirstReceiveTimestamp": "1545082649185"
               },
               "messageAttributes": {},
               "md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
               "eventSource": "aws:sqs",
               "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:my-queue",
               "awsRegion": "us-east-1"
           }
       ]
   }
   ```

1. Jalankan AWS CLI perintah [pemanggilan berikut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html). Perintah ini mengembalikan CloudWatch log dalam respon. Untuk informasi selengkapnya tentang mendapatkan log kembali, lihat [Akses log dengan AWS CLI](monitoring-cloudwatchlogs-view.md#monitoring-cloudwatchlogs-cli).

   ```
   aws lambda invoke --function-name ProcessSQSRecord --payload file://input.json out --log-type Tail \
   --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
   ```

   **cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.

1. Temukan `INFO` log di respons. Di sinilah fungsi Lambda mencatat badan pesan. Anda akan melihat log yang terlihat seperti ini:

   ```
   2023-09-11T22:45:04.271Z	348529ce-2211-4222-9099-59d07d837b60	INFO	Processed message test
   2023-09-11T22:45:04.288Z	348529ce-2211-4222-9099-59d07d837b60	INFO	done
   ```

## Buat antrean Amazon SQS
<a name="with-sqs-configure-sqs"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps4.png)


Buat antrean Amazon SQS yang dapat digunakan oleh fungsi Lambda sebagai sumber kejadian. Fungsi Lambda dan antrean Amazon SQS harus sama. Wilayah AWS

**Untuk membuat antrean**

1. Buka [konsol Amazon SQS](https://console.aws.amazon.com/sqs).

1. Pilih **Buat antrean**.

1. Masukkan nama untuk antrian. Biarkan semua opsi lain di pengaturan default.

1. Pilih **Buat antrean**.

Setelah membuat antrian, catat ARN-nya. Anda memerlukan ini di langkah berikutnya ketika Anda mengasosiasikan antrean dengan fungsi Lambda Anda.

## Konfigurasikan sumber kejadian
<a name="with-sqs-attach-notification-configuration"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps5.png)


[Hubungkan antrean Amazon SQS ke fungsi Lambda Anda dengan membuat pemetaan sumber peristiwa.](invocation-eventsourcemapping.md) Pemetaan sumber peristiwa membaca antrian Amazon SQS dan memanggil fungsi Lambda Anda saat pesan baru ditambahkan.

Untuk membuat pemetaan antara antrian Amazon SQS dan fungsi Lambda Anda, gunakan perintah. [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html) AWS CLI Contoh:

```
aws lambda create-event-source-mapping --function-name ProcessSQSRecord  --batch-size 10 \
--event-source-arn arn:aws:sqs:us-east-1:111122223333:my-queue
```

Untuk mendapatkan daftar pemetaan sumber acara Anda, gunakan perintah. [list-event-source-mappings](https://awscli.amazonaws.com/v2/documentation/api/2.1.29/reference/lambda/list-event-source-mappings.html) Contoh:

```
aws lambda list-event-source-mappings --function-name ProcessSQSRecord
```

## Mengirim pesan pengujian
<a name="with-sqs-test-message"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps6.png)


**Untuk mengirim pesan Amazon SQS ke fungsi Lambda**

1. Buka [konsol Amazon SQS](https://console.aws.amazon.com/sqs).

1. Pilih antrian yang Anda buat sebelumnya.

1. Pilih **Kirim dan terima pesan**.

1. Di bawah **Badan pesan**, masukkan pesan pengujian, seperti “ini adalah pesan pengujian.”

1. Pilih **Kirim pesan**.

Lambda melakukan polling antrian untuk pembaruan. Ketika ada pesan baru, Lambda memanggil fungsi Anda dengan data peristiwa baru ini dari antrian. Jika fungsi handler kembali tanpa pengecualian, Lambda menganggap pesan berhasil diproses dan mulai membaca pesan baru dalam antrian. Setelah berhasil memproses pesan, Lambda secara otomatis menghapusnya dari antrian. Jika handler melempar pengecualian, Lambda menganggap kumpulan pesan tidak berhasil diproses, dan Lambda memanggil fungsi dengan kumpulan pesan yang sama.

## Periksa CloudWatch log
<a name="with-sqs-check-logs"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/sqs_tut_steps7.png)


**Untuk mengonfirmasi bahwa fungsi tersebut memproses pesan**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih SQSRecord fungsi **Proses**.

1. Pilih **Monitor**.

1. Pilih **Lihat CloudWatch log**.

1. Di CloudWatch konsol, pilih **aliran Log** untuk fungsi tersebut.

1. Temukan `INFO` log. Di sinilah fungsi Lambda mencatat badan pesan. Anda akan melihat pesan yang Anda kirim dari antrian Amazon SQS. Contoh:

   ```
   2023-09-11T22:49:12.730Z b0c41e9c-0556-5a8b-af83-43e59efeec71 INFO Processed message this is a test message.
   ```

## Bersihkan sumber daya Anda
<a name="cleanup"></a>

Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.

**Untuk menghapus fungsi Lambda**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.

**Untuk menghapus antrean Amazon SQS**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon SQS di. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. Pilih antrean yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan **confirm** di bidang input teks.

1. Pilih **Hapus**.

# Tutorial: Menggunakan antrian Amazon SQS lintas akun sebagai sumber acara
<a name="with-sqs-cross-account-example"></a>

Dalam tutorial ini, Anda membuat fungsi Lambda yang menggunakan pesan dari antrian Amazon Simple Queue Service (Amazon SQS) di akun yang berbeda. AWS Tutorial ini melibatkan dua AWS **akun: Akun A** mengacu pada akun yang berisi fungsi Lambda Anda, dan **Akun B** mengacu pada akun yang berisi antrian Amazon SQS.

## Prasyarat
<a name="with-sqs-cross-account-prepare"></a>

### Instal AWS Command Line Interface
<a name="install_aws_cli"></a>

Jika Anda belum menginstal AWS Command Line Interface, ikuti langkah-langkah di [Menginstal atau memperbarui versi terbaru AWS CLI untuk menginstalnya](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Tutorial ini membutuhkan terminal baris perintah atau shell untuk menjalankan perintah. Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.

**catatan**  
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (`zip`seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, [instal Windows Subsystem untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) Linux. 

## Buat peran eksekusi (Akun A)
<a name="with-sqs-cross-account-create-execution-role"></a>

Di **Akun A**, buat [peran eksekusi](lambda-intro-execution-role.md) yang memberikan izin fungsi Anda untuk mengakses AWS sumber daya yang diperlukan.

**Untuk membuat peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) di konsol AWS Identity and Access Management (IAM).

1. Pilih **Buat peran**.

1. Buat peran dengan properti berikut.
   + **Entitas tepercaya** - **AWS Lambda**
   + **Izin** – **AWSLambdaSQSQueueExecutionRole**
   + **Nama peran** – **cross-account-lambda-sqs-role**

**AWSLambdaSQSQueueExecutionRole**Kebijakan ini memiliki izin yang diperlukan fungsi untuk membaca item dari Amazon SQS dan untuk menulis log ke Amazon CloudWatch Logs.

## Buat fungsi (Akun A)
<a name="with-sqs-cross-account-create-function"></a>

Di **Akun A**, buat fungsi Lambda yang memproses pesan Amazon SQS Anda. Fungsi Lambda dan antrean Amazon SQS harus sama. Wilayah AWS

Contoh kode Node.js berikut menulis setiap pesan ke log in CloudWatch Log.

**Example index.mjs**  

```
export const handler = async function(event, context) {
  event.Records.forEach(record => {
    const { body } = record;
    console.log(body);
  });
  return {};
}
```

**Untuk membuat fungsi**
**catatan**  
Mengikuti langkah-langkah ini menciptakan fungsi Node.js. Untuk bahasa lain, langkah-langkahnya serupa, tetapi beberapa detailnya berbeda.

1. Simpan contoh kode sebagai file bernama`index.mjs`.

1. Buat paket deployment.

   ```
   zip function.zip index.mjs
   ```

1. Buat fungsi menggunakan perintah `create-function` AWS Command Line Interface (AWS CLI). Ganti `arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role` dengan ARN dari peran eksekusi yang Anda buat sebelumnya.

   ```
   aws lambda create-function --function-name CrossAccountSQSExample \
   --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \
   --role arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role
   ```

## Uji fungsi (Akun A)
<a name="with-sqs-cross-account-create-test-function"></a>

Di **Akun A**, uji fungsi Lambda Anda secara manual menggunakan `invoke` AWS CLI perintah dan contoh peristiwa Amazon SQS.

Jika handler kembali normal tanpa pengecualian, Lambda menganggap pesan berhasil diproses dan mulai membaca pesan baru dalam antrian. Setelah berhasil memproses pesan, Lambda secara otomatis menghapusnya dari antrian. Jika handler melempar pengecualian, Lambda menganggap kumpulan pesan tidak berhasil diproses, dan Lambda memanggil fungsi dengan kumpulan pesan yang sama.

1. Simpan JSON berikut sebagai file bernama`input.txt`.

   ```
   {
       "Records": [
           {
               "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
               "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
               "body": "test",
               "attributes": {
                   "ApproximateReceiveCount": "1",
                   "SentTimestamp": "1545082649183",
                   "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                   "ApproximateFirstReceiveTimestamp": "1545082649185"
               },
               "messageAttributes": {},
               "md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
               "eventSource": "aws:sqs",
               "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:example-queue",
               "awsRegion": "us-east-1"
           }
       ]
   }
   ```

   JSON sebelumnya mensimulasikan peristiwa yang mungkin dikirimkan Amazon SQS ke fungsi Lambda Anda, yang berisi pesan aktual dari antrian. `"body"`

1. Jalankan perintah `invoke` AWS CLI berikut.

   ```
   aws lambda invoke --function-name CrossAccountSQSExample \
   --cli-binary-format raw-in-base64-out \
   --payload file://input.txt outputfile.txt
   ```

   **cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.

1. Verifikasikan output dalam `outputfile.txt` file.

## Buat antrean Amazon SQS (Akun B)
<a name="with-sqs-cross-account-configure-sqs"></a>

Di **Akun B**, buat antrean Amazon SQS yang dapat digunakan oleh fungsi Lambda di **Akun A sebagai sumber** peristiwa. Fungsi Lambda dan antrean Amazon SQS harus sama. Wilayah AWS

**Untuk membuat antrean**

1. Buka [konsol Amazon SQS](https://console.aws.amazon.com/sqs).

1. Pilih **Buat antrean**.

1. Buat antrian dengan properti berikut.
   + **Tipe** - **Standar**
   + **Nama** – **LambdaCrossAccountQueue**
   + **Konfigurasi** - Pertahankan pengaturan default.
   + **Kebijakan akses** — Pilih **Lanjutan**. Tempel dalam kebijakan JSON berikut. Ganti nilai-nilai berikut:
     + `111122223333`: Akun AWS ID untuk **Akun A**
     + `444455556666`: Akun AWS ID untuk **Akun B**

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Id": "Queue1_Policy_UUID",
         "Statement": [
             {
                 "Sid": "Queue1_AllActions",
                 "Effect": "Allow",
                 "Principal": {
                     "AWS": [
                         "arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role"
                     ]
                 },
                 "Action": "sqs:*",
                 "Resource": "arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue"
             }
         ]
     }
     ```

------

     Kebijakan ini memberikan peran eksekusi Lambda **dalam izin Akun** A untuk menggunakan pesan dari antrean Amazon SQS ini.

1. Setelah membuat antrian, rekam Nama Sumber Daya Amazon (ARN). Anda memerlukan ini di langkah berikutnya ketika Anda mengasosiasikan antrean dengan fungsi Lambda Anda.

## Konfigurasikan sumber acara (Akun A)
<a name="with-sqs-cross-account-event-source"></a>

Di **Akun A**, buat pemetaan sumber peristiwa antara antrian Amazon SQS **di Akun** B dan fungsi Lambda Anda dengan menjalankan perintah berikut. `create-event-source-mapping` AWS CLI Ganti `arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue` dengan ARN antrean Amazon SQS yang Anda buat pada langkah sebelumnya.

```
aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \
--event-source-arn arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue
```

Untuk mendapatkan daftar pemetaan sumber acara Anda, jalankan perintah berikut.

```
aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \
--event-source-arn arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue
```

## Uji penyiapan
<a name="with-sqs-final-integration-test-no-iam"></a>

Anda sekarang dapat menguji pengaturan sebagai berikut:

1. Di **Akun B**, buka konsol [Amazon SQS.](https://console.aws.amazon.com/sqs)

1. Pilih **LambdaCrossAccountQueue**, yang Anda buat sebelumnya.

1. Pilih **Kirim dan terima pesan**.

1. Di bawah **Badan pesan**, masukkan pesan pengujian.

1. Pilih **Kirim pesan**.

Fungsi Lambda Anda di **Akun A** harus menerima pesan. Lambda akan terus melakukan polling antrian untuk pembaruan. Ketika ada pesan baru, Lambda memanggil fungsi Anda dengan data peristiwa baru ini dari antrian. Fungsi Anda berjalan dan membuat log di Amazon CloudWatch. Anda dapat melihat log di [CloudWatch konsol](https://console.aws.amazon.com/cloudwatch).

## Bersihkan sumber daya Anda
<a name="cleanup"></a>

Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.

Di **Akun A**, bersihkan peran eksekusi dan fungsi Lambda Anda.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.

**Untuk menghapus fungsi Lambda**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.

Di **Akun B**, bersihkan antrian Amazon SQS.

**Untuk menghapus antrean Amazon SQS**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon SQS di. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. Pilih antrean yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan **confirm** di bidang input teks.

1. Pilih **Hapus**.