

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

# Menggunakan Lambda dengan Amazon MQ
<a name="with-mq"></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)

Amazon MQ adalah layanan broker pesan terkelola untuk [Apache ActiveMQ](https://activemq.apache.org/) dan [RabbitMQ](https://www.rabbitmq.com). *Broker pesan* memungkinkan aplikasi dan komponen perangkat lunak untuk berkomunikasi menggunakan berbagai bahasa pemrograman, sistem operasi, dan protokol pesan formal baik melalui topik atau tujuan acara antrian.

Amazon MQ juga dapat mengelola instans Amazon Elastic Compute Cloud (Amazon EC2) atas nama Anda dengan menginstal broker ActiveMQ atau RabbitMQ dan dengan menyediakan berbagai topologi jaringan dan kebutuhan infrastruktur lainnya.

Anda dapat menggunakan fungsi Lambda untuk memproses rekaman dari broker pesan Amazon MQ Anda. [Lambda memanggil fungsi Anda melalui [pemetaan sumber peristiwa, sumber](invocation-eventsourcemapping.md) daya Lambda yang membaca pesan dari broker Anda dan memanggil fungsi secara serempak.](invocation-sync.md)

**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 

Pemetaan sumber kejadian Amazon MQ memiliki pembatasan konfigurasi berikut:
+ [Konkurensi - Fungsi Lambda yang menggunakan pemetaan sumber peristiwa Amazon MQ memiliki pengaturan konkurensi maksimum default.](lambda-concurrency.md) Untuk ActiveMQ, layanan Lambda membatasi jumlah lingkungan eksekusi bersamaan hingga lima per pemetaan sumber peristiwa Amazon MQ. Untuk RabbitMQ, jumlah lingkungan eksekusi bersamaan dibatasi hingga 1 per pemetaan sumber peristiwa Amazon MQ. Bahkan jika Anda mengubah setelan konkurensi yang dicadangkan atau disediakan fungsi, layanan Lambda tidak akan membuat lebih banyak lingkungan eksekusi tersedia. Untuk meminta peningkatan konkurensi maksimum default untuk satu pemetaan sumber peristiwa Amazon MQ, Dukungan hubungi UUID pemetaan sumber peristiwa, serta wilayah. Karena peningkatan diterapkan pada tingkat pemetaan sumber peristiwa tertentu, bukan tingkat akun atau wilayah, Anda perlu meminta peningkatan penskalaan secara manual untuk setiap pemetaan sumber peristiwa.
+ Lintas akun — Lambda tidak mendukung pemrosesan lintas akun. Anda tidak dapat menggunakan Lambda untuk memproses catatan dari broker pesan Amazon MQ yang berbeda. Akun AWS
+ Otentikasi - Untuk ActiveMQ, hanya ActiveMQ yang didukung. [SimpleAuthenticationPlugin](https://activemq.apache.org/security#simple-authentication-plugin) Untuk RabbitMQ, hanya mekanisme otentikasi [PLAIN](https://www.rabbitmq.com/access-control.html#mechanisms) yang didukung. Pengguna harus menggunakan AWS Secrets Manager untuk mengelola kredensialnya. *Untuk informasi selengkapnya tentang otentikasi ActiveMQ, lihat [Mengintegrasikan broker ActiveMQ dengan LDAP di Panduan Pengembang Amazon MQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html).*
+ Kuota koneksi – Broker memiliki jumlah maksimum koneksi yang diizinkan untuk setiap protokol wire-level. Kuota ini didasarkan pada jenis instans broker. Untuk informasi lebih lanjut, lihat bagian [Broker](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-limits.html#broker-limits) dari **Kuota di Amazon MQ** dalam *Panduan Developer Amazon MQ*.
+ Konektivitas – Anda dapat membuat broker di virtual private cloud (VPC) publik atau privat. Untuk pribadi VPCs, fungsi Lambda Anda memerlukan akses ke VPC untuk menerima pesan. Untuk informasi lebih lanjut, lihat [Konfigurasikan keamanan jaringan](process-mq-messages-with-lambda.md#process-mq-messages-with-lambda-networkconfiguration) nanti di bagian ini.
+ Tujuan kejadian – Hanya tujuan antrean yang didukung. Namun, Anda dapat menggunakan topik virtual, yang berfungsi sebagai topik secara internal sambil berinteraksi dengan Lambda sebagai antrean. Untuk informasi lebih lanjut, lihat [Tujuan Virtual](https://activemq.apache.org/virtual-destinations) di situs web Apache ActiveMQ, [dan Host Virtual](https://www.rabbitmq.com/vhosts.html) di situs web RabbitMQ.
+ Topologi jaringan - Untuk ActiveMQ, hanya satu broker tunggal atau siaga yang didukung per pemetaan sumber peristiwa. Untuk RabbitMQ, hanya satu broker instans tunggal atau penerapan klaster yang didukung per pemetaan sumber peristiwa. Broker instans tunggal memerlukan titik akhir failover. Untuk informasi selengkapnya tentang mode penyebaran broker ini, lihat Arsitektur Broker [MQ Aktif dan Arsitektur Broker](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-broker-architecture.html) [MQ Kelinci di Panduan Pengembang](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/rabbitmq-broker-architecture.html) Amazon *MQ*.
+ Protokol — Protokol yang didukung bergantung pada jenis integrasi Amazon MQ.
  + Untuk integrasi ActiveMQ, Lambda menggunakan pesan menggunakan OpenWire/Java protokol Message Service (JMS). Tidak ada protokol lain yang didukung untuk mengkonsumsi pesan. Dalam protokol JMS, hanya [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html) dan [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html) yang didukung. Lambda juga mendukung properti kustom JMS. Untuk informasi lebih lanjut tentang OpenWire protokol, lihat [OpenWire](https://activemq.apache.org/openwire.html)di situs web Apache ActiveMQ.
  + Untuk integrasi RabbitMQ, Lambda mengkonsumsi pesan menggunakan protokol AMQP 0-9-1. Tidak ada protokol lain yang didukung untuk mengkonsumsi pesan. Untuk informasi lebih lanjut tentang implementasi protokol AMQP 0-9-1 RabbitMQ, lihat [AMQP 0-9-1 Panduan Referensi Lengkap di situs web RabbitMQ](https://www.rabbitmq.com/amqp-0-9-1-reference.html).

Lambda secara otomatis mendukung versi terbaru ActiveMQ dan RabbitMQ yang didukung Amazon MQ. Untuk versi terbaru yang didukung, lihat [catatan rilis Amazon MQ di Panduan Pengembang](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-release-notes.html) *Amazon MQ*.

**catatan**  
Secara default, Amazon MQ memiliki jangka waktu pemeliharaan mingguan untuk broker. Selama jangka waktu tersebut, broker tidak tersedia. Untuk broker tanpa standby, Lambda tidak dapat memproses pesan apa pun selama jangka waktu tersebut.

**Topics**
+ [Memahami grup konsumen Lambda untuk Amazon MQ](#services-mq-configure)
+ [Mengonfigurasi sumber acara Amazon MQ untuk Lambda](process-mq-messages-with-lambda.md)
+ [Parameter pemetaan sumber peristiwa](services-mq-params.md)
+ [Filter peristiwa dari sumber acara Amazon MQ](with-mq-filtering.md)
+ [Memecahkan masalah kesalahan pemetaan sumber peristiwa Amazon MQ](services-mq-errors.md)

## Memahami grup konsumen Lambda untuk Amazon MQ
<a name="services-mq-configure"></a>

Untuk berinteraksi dengan Amazon MQ, Lambda membuat grup konsumen yang dapat membaca dari broker Amazon MQ Anda. Grup konsumen dibuat dengan ID yang sama dengan UUID pemetaan sumber kejadian.

Untuk sumber peristiwa Amazon MQ, Lambda mengumpulkan catatan bersama dan mengirimkannya ke fungsi Anda dalam satu muatan. Untuk mengontrol perilaku, Anda dapat mengonfigurasi jendela batching dan ukuran batch. Lambda menarik pesan hingga memproses ukuran muatan maksimum 6 MB, jendela batching kedaluwarsa, atau jumlah catatan mencapai ukuran batch penuh. Untuk informasi selengkapnya, lihat [Perilaku batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Grup konsumen mengambil pesan sebagai BLOB byte, base64-mengkodekannya ke dalam satu muatan JSON, dan kemudian memanggil fungsi Anda. Jika fungsi Anda mengembalikan kesalahan untuk salah satu pesan dalam batch, Lambda mencoba ulang seluruh batch pesan sampai berhasil diproses atau pesan berakhir.

**catatan**  
Sementara fungsi Lambda biasanya memiliki batas waktu tunggu maksimum 15 menit, pemetaan sumber acara untuk Amazon MSK, Apache Kafka yang dikelola sendiri, Amazon DocumentDB, dan Amazon MQ untuk ActiveMQ dan RabbitMQ hanya mendukung fungsi dengan batas waktu tunggu maksimum 14 menit. Kendala ini memastikan bahwa pemetaan sumber peristiwa dapat menangani kesalahan fungsi dan percobaan ulang dengan benar.

Anda dapat memantau penggunaan konkurensi fungsi tertentu menggunakan `ConcurrentExecutions` metrik di Amazon CloudWatch. Untuk informasi selengkapnya tentang konkurensi, lihat [Mengkonfigurasi konkurensi cadangan untuk suatu fungsi](configuration-concurrency.md).

**Example Acara rekam Amazon MQ**  

```
{
   "eventSource": "aws:mq",
   "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
   "messages": [
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", 
        "messageType": "jms/text-message",
        "deliveryMode": 1,
        "replyTo": null,
        "type": null,
        "expiration": "60000",
        "priority": 1,
        "correlationId": "myJMSCoID",
        "redelivered": false,
        "destination": { 
          "physicalName": "testQueue" 
        },
        "data":"QUJDOkFBQUE=",
        "timestamp": 1598827811958,
        "brokerInTime": 1598827811958, 
        "brokerOutTime": 1598827811959, 
        "properties": {
          "index": "1",
          "doAlarm": "false",
          "myCustomProperty": "value"
        }
      },
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1",
        "messageType": "jms/bytes-message",
        "deliveryMode": 1,
        "replyTo": null,
        "type": null,
        "expiration": "60000",
        "priority": 2,
        "correlationId": "myJMSCoID1",
        "redelivered": false,
        "destination": { 
          "physicalName": "testQueue" 
        },
        "data":"LQaGQ82S48k=",
        "timestamp": 1598827811958,
        "brokerInTime": 1598827811958, 
        "brokerOutTime": 1598827811959, 
        "properties": {
          "index": "1",
          "doAlarm": "false",
          "myCustomProperty": "value"
        }
      }
   ]
}
```

```
{
  "eventSource": "aws:rmq",
  "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8",
  "rmqMessagesByQueue": {
    "pizzaQueue::/": [
      {
        "basicProperties": {
          "contentType": "text/plain",
          "contentEncoding": null,
          "headers": {
            "header1": {
              "bytes": [
                118,
                97,
                108,
                117,
                101,
                49
              ]
            },
            "header2": {
              "bytes": [
                118,
                97,
                108,
                117,
                101,
                50
              ]
            },
            "numberInHeader": 10
          },
          "deliveryMode": 1,
          "priority": 34,
          "correlationId": null,
          "replyTo": null,
          "expiration": "60000",
          "messageId": null,
          "timestamp": "Jan 1, 1970, 12:33:41 AM",
          "type": null,
          "userId": "AIDACKCEVSQ6C2EXAMPLE",
          "appId": null,
          "clusterId": null,
          "bodySize": 80
        },
        "redelivered": false,
        "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
      }
    ]
  }
}
```
Dalam contoh RabbitMQ, `pizzaQueue` adalah nama antrian RabbitMQ, dan `/` merupakan nama host virtual. Saat menerima pesan, sumber acara mencantumkan pesan di bawah`pizzaQueue::/`.

# Mengonfigurasi sumber acara Amazon MQ untuk Lambda
<a name="process-mq-messages-with-lambda"></a>

**Topics**
+ [Konfigurasikan keamanan jaringan](#process-mq-messages-with-lambda-networkconfiguration)
+ [Buat pemetaan sumber acara](#services-mq-eventsourcemapping)

## Konfigurasikan keamanan jaringan
<a name="process-mq-messages-with-lambda-networkconfiguration"></a>

Untuk memberi Lambda akses penuh ke Amazon MQ melalui pemetaan sumber acara Anda, broker Anda harus menggunakan titik akhir publik (alamat IP publik), atau Anda harus memberikan akses ke VPC Amazon tempat Anda membuat broker.

Saat Anda menggunakan Amazon MQ dengan Lambda, buat [titik akhir AWS PrivateLink VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) yang menyediakan akses fungsi Anda ke sumber daya di VPC Amazon Anda.

**catatan**  
AWS PrivateLink Titik akhir VPC diperlukan untuk fungsi dengan pemetaan sumber peristiwa yang menggunakan mode default (sesuai permintaan) untuk poller acara. Jika pemetaan sumber acara menggunakan [mode yang disediakan](invocation-eventsourcemapping.md#invocation-eventsourcemapping-provisioned-mode), Anda tidak perlu mengonfigurasi titik akhir AWS PrivateLink VPC.

Buat titik akhir untuk menyediakan akses ke sumber daya berikut:
+  Lambda — Buat titik akhir untuk kepala layanan Lambda. 
+  AWS STS — Buat titik akhir AWS STS untuk prinsipal layanan untuk mengambil peran atas nama Anda. 
+  Secrets Manager — Jika broker Anda menggunakan Secrets Manager untuk menyimpan kredensi, buat endpoint untuk Secrets Manager. 

Atau, konfigurasikan gateway NAT di setiap subnet publik di Amazon VPC. Untuk informasi selengkapnya, lihat [Aktifkan akses internet untuk fungsi Lambda yang terhubung dengan VPC](configuration-vpc-internet.md).

Saat Anda membuat pemetaan sumber peristiwa untuk Amazon MQ, Lambda memeriksa apakah Antarmuka Jaringan Elastis ENIs () sudah ada untuk subnet dan grup keamanan yang dikonfigurasi untuk Amazon VPC Anda. Jika Lambda menemukan yang ada ENIs, ia mencoba untuk menggunakannya kembali. Jika tidak, Lambda membuat yang baru ENIs untuk terhubung ke sumber acara dan memanggil fungsi Anda.

**catatan**  
Fungsi Lambda selalu berjalan di dalam yang VPCs dimiliki oleh layanan Lambda. Konfigurasi VPC fungsi Anda tidak memengaruhi pemetaan sumber peristiwa. Hanya konfigurasi jaringan sumber acara yang menentukan bagaimana Lambda terhubung ke sumber acara Anda.

Konfigurasikan grup keamanan untuk VPC Amazon yang berisi broker Anda. Secara default, Amazon MQ menggunakan port berikut: `61617` (Amazon MQ untuk ActiveMQ), `5671` dan (Amazon MQ untuk RabbitMQ).
+ Aturan masuk - Izinkan semua lalu lintas di port broker default untuk grup keamanan yang terkait dengan sumber acara Anda. Atau, Anda dapat menggunakan aturan grup keamanan referensi mandiri untuk mengizinkan akses dari instans dalam grup keamanan yang sama.
+ Aturan keluar - Izinkan semua lalu lintas di port `443` untuk tujuan eksternal jika fungsi Anda perlu berkomunikasi dengan AWS layanan. Atau, Anda juga dapat menggunakan aturan grup keamanan referensi diri untuk membatasi akses ke broker jika Anda tidak perlu berkomunikasi dengan layanan lain AWS .
+ Aturan masuk titik akhir VPC Amazon — Jika Anda menggunakan titik akhir VPC Amazon, grup keamanan yang terkait dengan titik akhir VPC Amazon Anda harus mengizinkan lalu lintas masuk di port dari grup keamanan broker. `443`

Jika broker Anda menggunakan otentikasi, Anda juga dapat membatasi kebijakan titik akhir untuk titik akhir Secrets Manager. Untuk memanggil Secrets Manager API, Lambda menggunakan peran fungsi Anda, bukan kepala layanan Lambda.

**Example Kebijakan titik akhir VPC — titik akhir Secrets Manager**  

```
{
      "Statement": [
          {
              "Action": "secretsmanager:GetSecretValue",
              "Effect": "Allow",
              "Principal": {
                  "AWS": [
                      "arn:aws::iam::123456789012:role/my-role"
                  ]
              },
              "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"
          }
      ]
  }
```

Saat Anda menggunakan titik akhir Amazon VPC, AWS merutekan panggilan API Anda untuk menjalankan fungsi Anda menggunakan Antarmuka Jaringan Elastis (ENI) titik akhir. Kepala layanan Lambda perlu memanggil `lambda:InvokeFunction` peran dan fungsi apa pun yang menggunakannya. ENIs

Secara default, titik akhir Amazon VPC memiliki kebijakan IAM terbuka yang memungkinkan akses luas ke sumber daya. Praktik terbaik adalah membatasi kebijakan ini untuk melakukan tindakan yang diperlukan menggunakan titik akhir tersebut. Untuk memastikan bahwa pemetaan sumber peristiwa Anda dapat menjalankan fungsi Lambda Anda, kebijakan titik akhir VPC harus mengizinkan kepala layanan Lambda untuk memanggil dan. `sts:AssumeRole` `lambda:InvokeFunction` Membatasi kebijakan titik akhir VPC Anda agar hanya mengizinkan panggilan API yang berasal dari organisasi Anda mencegah pemetaan sumber peristiwa berfungsi dengan baik, `"Resource": "*"` sehingga diperlukan dalam kebijakan ini.

Contoh kebijakan titik akhir VPC berikut menunjukkan cara memberikan akses yang diperlukan ke prinsipal layanan Lambda untuk titik akhir dan Lambda. AWS STS 

**Example Kebijakan Titik Akhir VPC — titik akhir AWS STS**  

```
{
      "Statement": [
          {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
    }
```

**Example Kebijakan Titik Akhir VPC - Titik akhir Lambda**  

```
{
      "Statement": [
          {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
  }
```

## Buat pemetaan sumber acara
<a name="services-mq-eventsourcemapping"></a>

Buat [pemetaan sumber kejadian](invocation-eventsourcemapping.md) untuk memberi tahu Lambda agar mengirim rekaman dari broker Amazon MQ ke fungsi Lambda. Anda dapat membuat beberapa pemetaan sumber kejadian untuk memproses data yang sama dengan beberapa fungsi, atau untuk memproses item dari beberapa sumber dengan satu fungsi.

Untuk mengonfigurasi fungsi agar dibaca dari Amazon MQ, tambahkan izin yang diperlukan dan buat **pemicu MQ** di konsol Lambda.

Untuk membaca catatan dari broker Amazon MQ, fungsi Lambda Anda memerlukan izin berikut. [Anda memberi Lambda izin untuk berinteraksi dengan broker Amazon MQ Anda dan sumber yang mendasarinya dengan menambahkan pernyataan izin ke peran eksekusi fungsi Anda:](lambda-intro-execution-role.md)
+ [mq: DescribeBroker](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-http-methods)
+ [manajer rahasia: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ [EC2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
+ [EC2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
+ [EC2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
+ [EC2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)
+ [EC2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
+ [EC2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+ [log: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
+ [log: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
+ [log: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)

**catatan**  
Saat menggunakan kunci terkelola pelanggan yang terenkripsi, tambahkan juga izin `[kms:Decrypt](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html#clusters-clusterarn-bootstrap-brokersget)`.

**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 **Buat kebijakan sebaris**.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/inline-policy.png)

1. Di **editor Kebijakan**, pilih **JSON**. Masukkan kebijakan berikut. Fungsi Anda memerlukan izin ini untuk membaca dari broker Amazon MQ.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "mq:DescribeBroker",
             "secretsmanager:GetSecretValue",
             "ec2:CreateNetworkInterface",
             "ec2:DeleteNetworkInterface",
             "ec2:DescribeNetworkInterfaces", 
             "ec2:DescribeSecurityGroups",
             "ec2:DescribeSubnets",
             "ec2:DescribeVpcs",
             "logs:CreateLogGroup",
             "logs:CreateLogStream", 
             "logs:PutLogEvents"		
           ],
           "Resource": "*"
         }
       ]
     }
   ```

------
**catatan**  
Saat menggunakan kunci terkelola pelanggan terenkripsi, Anda juga harus menambahkan izin. `kms:Decrypt`

1. Pilih **Berikutnya**. Masukkan nama kebijakan, lalu pilih **Buat kebijakan**.

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 **MQ**.

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

Lambda mendukung opsi berikut untuk sumber kejadian Amazon MQ:
+ **MQ broker** – Pilih broker Amazon MQ.
+ **Ukuran batch** – Atur jumlah maksimum pesan yang akan diambil dalam satu batch.
+ **Nama antrean** – Masukkan antrean Amazon MQ yang akan digunakan.
+ **Konfigurasi akses sumber** — Masukkan informasi host virtual dan rahasia Secrets Manager yang menyimpan kredensi broker Anda.
+ **Aktifkan pemicu** – Nonaktifkan pemicu untuk menghentikan pemrosesan rekaman.

Untuk mengaktifkan atau menonaktifkan pemicu (atau menghapusnya) pilih pemicu **MQ** di desainer. Untuk mengonfigurasi ulang pemicu, gunakan operasi API pemetaan sumber kejadian.

# Parameter pemetaan sumber peristiwa
<a name="services-mq-params"></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 MQ dan RabbitMQ.


| Parameter | Diperlukan | Default | Catatan | 
| --- | --- | --- | --- | 
|  BatchSize  |  T  |  100  |  Maksimum: 10.000.  | 
|  Diaktifkan  |  T  |  true  | none | 
|  FunctionName  |  T  | N/A  | none | 
|  FilterCriteria  |  T  |  N/A   |  [Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md)  | 
|  MaximumBatchingWindowInSeconds  |  T  |  500 ms  |  [Perilaku batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching)  | 
|  Antrean  |  T  | N/A |  Nama antrean tujuan broker Amazon MQ yang akan digunakan.  | 
|  SourceAccessConfigurations  |  T  | N/A  |  Untuk ActiveMQ, kredensial BASIC\$1AUTH. Untuk RabbitMQ, dapat berisi kredensial BASIC\$1AUTH dan informasi VIRTUAL\$1HOST.  | 

# Filter peristiwa dari sumber acara Amazon MQ
<a name="with-mq-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 MQ.

**catatan**  
Pemetaan sumber acara Amazon MQ hanya mendukung pemfilteran pada kunci. `data`

**Topics**
+ [Dasar-dasar penyaringan acara Amazon MQ](#filtering-AMQ)

## Dasar-dasar penyaringan acara Amazon MQ
<a name="filtering-AMQ"></a>

Misalkan antrian pesan Amazon MQ Anda berisi pesan baik dalam format JSON yang valid atau sebagai string biasa. Contoh catatan akan terlihat seperti berikut, dengan data dikonversi ke string yang dikodekan Base64 di lapangan. `data`

------
#### [ ActiveMQ ]

```
{ 
    "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", 
    "messageType": "jms/text-message",
    "deliveryMode": 1,
    "replyTo": null,
    "type": null,
    "expiration": "60000",
    "priority": 1,
    "correlationId": "myJMSCoID",
    "redelivered": false,
    "destination": { 
      "physicalName": "testQueue" 
    },
    "data":"QUJDOkFBQUE=",
    "timestamp": 1598827811958,
    "brokerInTime": 1598827811958, 
    "brokerOutTime": 1598827811959, 
    "properties": {
      "index": "1",
      "doAlarm": "false",
      "myCustomProperty": "value"
    }
}
```

------
#### [ RabbitMQ ]

```
{
    "basicProperties": {
        "contentType": "text/plain",
        "contentEncoding": null,
        "headers": {
            "header1": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  49
                ]
            },
            "header2": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  50
                ]
            },
            "numberInHeader": 10
        },
        "deliveryMode": 1,
        "priority": 34,
        "correlationId": null,
        "replyTo": null,
        "expiration": "60000",
        "messageId": null,
        "timestamp": "Jan 1, 1970, 12:33:41 AM",
        "type": null,
        "userId": "AIDACKCEVSQ6C2EXAMPLE",
        "appId": null,
        "clusterId": null,
        "bodySize": 80
        },
    "redelivered": false,
    "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
}
```

------

Untuk broker MQ Aktif dan MQ Kelinci, Anda dapat menggunakan penyaringan acara untuk memfilter catatan menggunakan kunci. `data` Misalkan antrian Amazon MQ Anda berisi pesan dalam format JSON berikut.

```
{
    "timeout": 0,
    "IPAddress": "203.0.113.254"
}
```

Untuk memfilter hanya catatan yang `timeout` bidangnya lebih besar dari 0, `FilterCriteria` objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }"
        }
    ]
}
```

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

```
{
    "data": {
        "timeout": [ { "numeric": [ ">", 0 ] } ]
        }
}
```

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**.

```
{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
```

------
#### [ 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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

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

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

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'
```

------

Dengan Amazon MQ, Anda juga dapat memfilter catatan di mana pesan adalah string biasa. Misalkan Anda hanya ingin memproses catatan di mana pesan dimulai dengan “Hasil:”. `FilterCriteria`Objek akan terlihat sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"
        }
    ]
}
```

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

```
{
    "data": [
        {
        "prefix": "Result: "
        }
    ]
}
```

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**.

```
{ "data" : [ { "prefix": "Result: " } ] }
```

------
#### [ 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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

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": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

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

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

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'
```

------

Pesan Amazon MQ harus berupa string yang dikodekan UTF-8, baik string biasa atau dalam format JSON. Itu karena Lambda menerjemahkan array byte Amazon MQ ke UTF-8 sebelum menerapkan kriteria filter. Jika pesan Anda menggunakan pengkodean lain, seperti UTF-16 atau ASCII, atau jika format pesan tidak cocok dengan format`FilterCriteria`, Lambda hanya memproses filter metadata. Tabel berikut merangkum perilaku spesifik:


| Format pesan masuk | Format pola filter untuk properti pesan | 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  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  Tali polos  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  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.  | 
|  String yang tidak dikodekan UTF-8  |  JSON, string polos, atau tidak ada pola  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 

# Memecahkan masalah kesalahan pemetaan sumber peristiwa Amazon MQ
<a name="services-mq-errors"></a>

Ketika fungsi Lambda mengalami kesalahan yang tidak dapat dipulihkan, konsumen Amazon MQ Anda menghentikan pemrosesan rekaman. Konsumen lain dapat melanjutkan pemrosesan, asalkan mereka tidak mengalami kesalahan yang sama. Untuk menentukan kemungkinan penyebab dari konsumen yang dihentikan, periksa bidang `StateTransitionReason` dalam detail pengembalian `EventSourceMapping` untuk salah satu kode berikut:

**`ESM_CONFIG_NOT_VALID`**  
Konfigurasi pemetaan sumber kejadian tidak valid.

**`EVENT_SOURCE_AUTHN_ERROR`**  
Lambda gagal mengautentikasi sumber kejadian.

**`EVENT_SOURCE_AUTHZ_ERROR`**  
Lambda tidak memiliki izin yang diperlukan untuk mengakses sumber kejadian.

**`FUNCTION_CONFIG_NOT_VALID`**  
Konfigurasi fungsi tidak valid.

Catatan juga tidak diproses jika Lambda menjatuhkannya karena ukurannya. Batas ukuran untuk rekaman Lambda adalah 6 MB. Untuk mengirim ulang pesan setelah kesalahan fungsi, Anda dapat menggunakan antrian huruf mati (DLQ). [Untuk informasi selengkapnya, lihat [Pengiriman Ulang Pesan dan Penanganan DLQ](https://activemq.apache.org/message-redelivery-and-dlq-handling) di situs web Apache ActiveMQ dan Panduan Keandalan di situs web RabbitMQ.](https://www.rabbitmq.com/reliability.html)

**catatan**  
Lambda tidak mendukung kebijakan pengiriman ulang khusus. Sebagai gantinya, Lambda menggunakan kebijakan dengan nilai default dari halaman [Kebijakan Pengiriman Ulang di situs](https://activemq.apache.org/redelivery-policy) web Apache ActiveMQ, dengan disetel ke 6. `maximumRedeliveries`