

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

# Menggunakan Lambda dengan Apache Kafka yang dikelola sendiri
<a name="with-kafka"></a>

Topik ini menjelaskan cara menggunakan Lambda dengan klaster Kafka yang dikelola sendiri. Dalam AWS terminologi, cluster yang dikelola sendiri mencakup cluster Kafka yang tidak AWS dihosting. [Misalnya, Anda dapat meng-host cluster Kafka Anda dengan penyedia cloud seperti [Confluent Cloud](https://www.confluent.io/confluent-cloud/) atau Redpanda.](https://www.redpanda.com/)

Bab ini menjelaskan cara menggunakan cluster Apache Kafka yang dikelola sendiri sebagai sumber acara untuk fungsi Lambda Anda. Proses umum untuk mengintegrasikan Apache Kafka yang dikelola sendiri dengan Lambda melibatkan langkah-langkah berikut:

1. **[Pengaturan cluster dan jaringan](with-kafka-cluster-network.md)** — Pertama, siapkan cluster Apache Kafka yang dikelola sendiri dengan konfigurasi jaringan yang benar untuk memungkinkan Lambda mengakses cluster Anda.

1. **[Pengaturan pemetaan sumber peristiwa](with-kafka-configure.md)** — Kemudian, buat sumber daya [pemetaan sumber acara](invocation-eventsourcemapping.md) yang dibutuhkan Lambda untuk menghubungkan cluster Apache Kafka Anda dengan aman ke fungsi Anda.

1. **[Pengaturan fungsi dan izin](with-kafka-permissions.md)** — Terakhir, pastikan bahwa fungsi Anda diatur dengan benar, dan memiliki izin yang diperlukan dalam peran [pelaksanaannya](lambda-intro-execution-role.md).

Apache Kafka sebagai sumber peristiwa beroperasi sama dengan menggunakan Amazon Simple Queue Service (Amazon SQS) atau Amazon Kinesis. Lambda melakukan polling secara internal untuk pesan baru dari sumber peristiwa, lalu memanggil fungsi Lambda target secara sinkron. Lambda membaca pesan dalam batch dan menyediakan ini untuk fungsi Anda sebagai muatan acara. Ukuran batch maksimum dapat dikonfigurasi (defaultnya adalah 100 pesan). Untuk informasi selengkapnya, lihat [Perilaku batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Untuk mengoptimalkan throughput pemetaan sumber acara Apache Kafka yang dikelola sendiri, konfigurasikan mode yang disediakan. Dalam mode yang disediakan, Anda dapat menentukan jumlah minimum dan maksimum poller peristiwa yang dialokasikan untuk pemetaan sumber acara Anda. Ini dapat meningkatkan kemampuan pemetaan sumber acara Anda untuk menangani lonjakan pesan yang tidak terduga. Untuk informasi selengkapnya, lihat [mode yang disediakan.](kafka-scaling-modes.md#kafka-provisioned-mode)

**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 sumber peristiwa berbasis Kafka, Lambda mendukung parameter kontrol pemrosesan, seperti jendela batching dan ukuran batch. Untuk informasi selengkapnya, lihat [Perilaku batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Untuk contoh cara menggunakan Kafka yang dikelola sendiri sebagai sumber acara, lihat [Menggunakan Apache Kafka yang dihosting sendiri sebagai sumber acara](https://aws.amazon.com/blogs/compute/using-self-hosted-apache-kafka-as-an-event-source-for-aws-lambda/) di Blog Komputasi. AWS Lambda AWS 

**Topics**
+ [Contoh peristiwa](#smaa-sample-event)
+ [Mengkonfigurasi cluster dan jaringan Apache Kafka yang dikelola sendiri untuk Lambda](with-kafka-cluster-network.md)
+ [Mengonfigurasi izin peran eksekusi Lambda](with-kafka-permissions.md)
+ [Mengkonfigurasi sumber acara Apache Kafka yang dikelola sendiri untuk Lambda](with-kafka-configure.md)

## Contoh peristiwa
<a name="smaa-sample-event"></a>

Lambda mengirimkan batch pesan dalam parameter peristiwa ketika memanggil fungsi Lambda Anda. Muatan peristiwa berisi array pesan. Setiap item array berisi detail dari topik Kafka dan pengidentifikasi Kafka partisi, bersama-sama dengan stempel waktu dan pesan berkode base64.

```
{
   "eventSource": "SelfManagedKafka",
   "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092",
   "records":{
      "mytopic-0":[
         {
            "topic":"mytopic",
            "partition":0,
            "offset":15,
            "timestamp":1545084650987,
            "timestampType":"CREATE_TIME",
            "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==",
            "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
            "headers":[
               {
                  "headerKey":[
                     104,
                     101,
                     97,
                     100,
                     101,
                     114,
                     86,
                     97,
                     108,
                     117,
                     101
                  ]
               }
            ]
         }
      ]
   }
}
```

# Mengkonfigurasi cluster dan jaringan Apache Kafka yang dikelola sendiri untuk Lambda
<a name="with-kafka-cluster-network"></a>

Untuk menghubungkan fungsi Lambda Anda ke cluster Apache Kafka yang dikelola sendiri, Anda perlu mengkonfigurasi cluster dan jaringan tempat ia berada dengan benar. Halaman ini menjelaskan cara mengkonfigurasi cluster dan jaringan Anda. Jika kluster dan jaringan Anda sudah dikonfigurasi dengan benar, lihat [Mengkonfigurasi sumber acara Apache Kafka yang dikelola sendiri untuk Lambda](with-kafka-configure.md) untuk mengonfigurasi pemetaan sumber peristiwa.

**Topics**
+ [Pengaturan cluster Apache Kafka yang dikelola sendiri](#kafka-cluster-setup)
+ [Konfigurasikan keamanan jaringan](#services-kafka-vpc-config)

## Pengaturan cluster Apache Kafka yang dikelola sendiri
<a name="kafka-cluster-setup"></a>

Anda dapat meng-host cluster Apache Kafka yang dikelola sendiri dengan penyedia cloud seperti [Confluent Cloud](https://www.confluent.io/confluent-cloud/) atau [Redpanda, atau menjalankannya di infrastruktur Anda](https://www.redpanda.com/) sendiri. Pastikan klaster Anda dikonfigurasi dengan benar dan dapat diakses dari jaringan tempat pemetaan sumber peristiwa Lambda Anda akan terhubung.

## Konfigurasikan keamanan jaringan
<a name="services-kafka-vpc-config"></a>

Untuk memberi Lambda akses penuh ke Apache Kafka yang dikelola sendiri melalui pemetaan sumber acara Anda, kluster Anda harus menggunakan titik akhir publik (alamat IP publik), atau Anda harus memberikan akses ke Amazon VPC tempat Anda membuat klaster.

Saat Anda menggunakan Apache Kafka yang dikelola sendiri 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 klaster 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 Apache Kafka yang dikelola sendiri, Lambda memeriksa apakah Antarmuka Jaringan Elastis ENIs () sudah ada untuk subnet dan grup keamanan yang dikonfigurasi untuk VPC Amazon 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 cluster Anda. Secara default, Apache Kafka yang dikelola sendiri menggunakan port berikut:. `9092`
+ 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 pada port dari grup keamanan klaster. `443`

Jika klaster menggunakan autentikasi, Anda juga dapat membatasi kebijakan endpoint 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": "*"
          }
      ]
  }
```

# Mengonfigurasi izin peran eksekusi Lambda
<a name="with-kafka-permissions"></a>

Selain [mengakses cluster Kafka yang dikelola sendiri](kafka-cluster-auth.md), fungsi Lambda Anda memerlukan izin untuk melakukan berbagai tindakan API. Anda menambahkan izin ini ke [peran eksekusi](lambda-intro-execution-role.md) fungsi. Jika pengguna Anda memerlukan akses ke tindakan API apa pun, tambahkan izin yang diperlukan ke kebijakan identitas untuk pengguna atau AWS Identity and Access Management peran (IAM).

**Topics**
+ [Izin fungsi Lambda diperlukan](#smaa-api-actions-required)
+ [Izin fungsi Lambda opsional](#smaa-api-actions-optional)
+ [Menambahkan izin ke peran eksekusi](#smaa-permissions-add-policy)
+ [Memberikan akses pengguna dengan kebijakan IAM](#smaa-permissions-add-users)

## Izin fungsi Lambda diperlukan
<a name="smaa-api-actions-required"></a>

Untuk membuat dan menyimpan log dalam grup log di Amazon CloudWatch Logs, fungsi Lambda Anda harus memiliki izin berikut dalam peran pelaksanaannya:
+ [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)

## Izin fungsi Lambda opsional
<a name="smaa-api-actions-optional"></a>

Fungsi Lambda Anda mungkin juga memerlukan izin untuk:
+ Jelaskan rahasia Secrets Manager Anda.
+ Akses AWS Key Management Service (AWS KMS) kunci terkelola pelanggan Anda.
+ Akses VPC Amazon Anda.
+ Kirim catatan pemanggilan yang gagal ke tujuan.

### Secrets Manager dan AWS KMS izin
<a name="smaa-api-actions-secrets"></a>

Bergantung pada jenis kontrol akses yang Anda konfigurasikan untuk broker Kafka Anda, fungsi Lambda Anda mungkin memerlukan izin untuk mengakses rahasia Secrets Manager Anda atau untuk mendekripsi kunci yang dikelola pelanggan Anda. AWS KMS Untuk mengakses sumber daya ini, peran eksekusi fungsi Anda harus memiliki izin berikut:
+ [manajer rahasia: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)

### Izin VPC
<a name="smaa-api-actions-vpc"></a>

Jika hanya pengguna dalam VPC yang dapat mengakses cluster Apache Kafka yang dikelola sendiri, fungsi Lambda Anda harus memiliki izin untuk mengakses sumber daya VPC Amazon Anda. Sumber daya ini termasuk VPC, subnet, grup keamanan, dan antarmuka jaringan. Untuk mengakses sumber daya ini, peran eksekusi fungsi Anda harus memiliki izin berikut:
+ [EC2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
+ [EC2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
+ [EC2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+ [EC2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
+ [EC2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
+ [EC2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)

## Menambahkan izin ke peran eksekusi
<a name="smaa-permissions-add-policy"></a>

[Untuk mengakses AWS layanan lain yang digunakan cluster Apache Kafka yang dikelola sendiri, Lambda menggunakan kebijakan izin yang Anda tentukan dalam peran eksekusi fungsi Lambda Anda.](lambda-intro-execution-role.md)

Secara default, Lambda tidak diizinkan untuk melakukan tindakan yang diperlukan atau opsional untuk klaster Apache Kafka yang dikelola sendiri. Anda harus membuat dan mendefinisikan tindakan ini dalam [kebijakan kepercayaan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html) untuk peran eksekusi Anda. Contoh ini menunjukkan cara agar Anda dapat membuat kebijakan yang mengizinkan Lambda mengakses sumber daya Amazon VPC Anda.

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

****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement":[
           {
              "Effect":"Allow",
              "Action":[
                 "ec2:CreateNetworkInterface",
                 "ec2:DescribeNetworkInterfaces",
                 "ec2:DescribeVpcs",
                 "ec2:DeleteNetworkInterface",
                 "ec2:DescribeSubnets",
                 "ec2:DescribeSecurityGroups"
              ],
              "Resource":"*"
           }
        ]
     }
```

------

## Memberikan akses pengguna dengan kebijakan IAM
<a name="smaa-permissions-add-users"></a>

Secara default, pengguna dan peran tidak memiliki izin untuk melakukan [operasi API sumber peristiwa](invocation-eventsourcemapping.md#event-source-mapping-api). Untuk memberikan akses ke pengguna di organisasi atau akun Anda, Anda membuat atau memperbarui kebijakan berbasis identitas. Untuk informasi selengkapnya, lihat [Mengontrol akses ke AWS sumber daya menggunakan kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html) di *Panduan Pengguna IAM*.

Untuk mengatasi masalah kesalahan autentikasi dan otorisasi, lihat. [Memecahkan masalah kesalahan pemetaan sumber acara Kafka](with-kafka-troubleshoot.md)

# Mengkonfigurasi sumber acara Apache Kafka yang dikelola sendiri untuk Lambda
<a name="with-kafka-configure"></a>

Untuk menggunakan cluster Apache Kafka yang dikelola sendiri sebagai sumber peristiwa untuk fungsi Lambda Anda, Anda membuat [pemetaan sumber peristiwa yang menghubungkan dua sumber daya](invocation-eventsourcemapping.md). Halaman ini menjelaskan cara membuat pemetaan sumber acara untuk Apache Kafka yang dikelola sendiri.

Halaman ini mengasumsikan bahwa Anda telah mengkonfigurasi cluster Kafka dengan benar dan jaringan tempat ia berada. Jika Anda perlu mengatur cluster atau jaringan Anda, lihat[Mengkonfigurasi cluster dan jaringan Apache Kafka yang dikelola sendiri untuk Lambda](with-kafka-cluster-network.md).

**Topics**
+ [Menggunakan cluster Apache Kafka yang dikelola sendiri sebagai sumber acara](#kafka-esm-overview)
+ [Mengkonfigurasi metode otentikasi cluster di Lambda](kafka-cluster-auth.md)
+ [Membuat pemetaan sumber acara Lambda untuk sumber acara Apache Kafka yang dikelola sendiri](kafka-esm-create.md)
+ [Semua parameter konfigurasi sumber acara Apache Kafka yang dikelola sendiri di Lambda](kafka-esm-parameters.md)

## Menggunakan cluster Apache Kafka yang dikelola sendiri sebagai sumber acara
<a name="kafka-esm-overview"></a>

[Saat Anda menambahkan kluster Apache Kafka atau Amazon MSK sebagai pemicu fungsi Lambda Anda, cluster digunakan sebagai sumber peristiwa.](invocation-eventsourcemapping.md)

Lambda membaca data peristiwa dari topik Kafka yang Anda tentukan seperti `Topics` dalam [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)permintaan, berdasarkan [posisi awal](kafka-starting-positions.md) yang Anda tentukan. Setelah pemrosesan berhasil, topik Kafka Anda dijalankan untuk klaster Kafka Anda.

Lambda membaca pesan secara berurutan untuk setiap partisi topik Kafka. Payload Lambda tunggal dapat berisi pesan dari beberapa partisi. Bila lebih banyak rekaman tersedia, Lambda terus memproses catatan dalam batch, berdasarkan BatchSize nilai yang Anda tentukan dalam [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)permintaan, hingga fungsi Anda mengikuti topik.

Setelah Lambda memproses setiap batch, Lambda melakukan offset pesan dalam batch tersebut. Jika fungsi Anda mengembalikan kesalahan untuk salah satu pesan dalam batch, Lambda mencoba ulang seluruh batch pesan sampai berhasil diproses atau pesan berakhir. Anda dapat mengirim catatan yang gagal dalam semua upaya percobaan ulang ke tujuan yang gagal untuk diproses nanti.

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

# Mengkonfigurasi metode otentikasi cluster di Lambda
<a name="kafka-cluster-auth"></a>

Lambda mendukung beberapa metode untuk mengautentikasi dengan klaster Apache Kafka yang dikelola sendiri. Pastikan Anda mengonfigurasi cluster Kafka untuk menggunakan salah satu metode otentikasi yang didukung ini. Untuk informasi lebih lanjut tentang keamanan Kafka, lihat bagian [Keamanan](http://kafka.apache.org/documentation.html#security) dari dokumentasi Kafka.

## Otentikasi SASL/SCRAM
<a name="smaa-auth-sasl"></a>

Lambda mendukung otentikasi Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) otentikasi dengan enkripsi Transport Layer Security (TLS) (). `SASL_SSL` Lambda mengirimkan kredensial terenkripsi untuk mengautentikasi dengan klaster. Lambda tidak mendukung SASL/SCRAM dengan plaintext (). `SASL_PLAINTEXT` Untuk informasi selengkapnya tentang SASL/SCRAM otentikasi, lihat [RFC](https://tools.ietf.org/html/rfc5802) 5802.

Lambda juga mendukung SASL/PLAIN otentikasi. Karena mekanisme ini menggunakan kredensyal teks yang jelas, koneksi ke server harus menggunakan enkripsi TLS untuk memastikan bahwa kredensialnya dilindungi.

Untuk autentikasi SASL, Anda menyimpan kredensyal masuk sebagai rahasia. AWS Secrets Manager Untuk informasi selengkapnya tentang menggunakan Secrets Manager, lihat [Membuat AWS Secrets Manager rahasia](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) di *Panduan AWS Secrets Manager Pengguna*.

**penting**  
Untuk menggunakan Secrets Manager untuk otentikasi, rahasia harus disimpan di AWS wilayah yang sama dengan fungsi Lambda Anda.

## Autentikasi TLS bersama
<a name="smaa-auth-mtls"></a>

Mutual TLS (mTLS) menyediakan otentikasi dua arah antara klien dan server. Klien mengirimkan sertifikat ke server untuk server untuk memverifikasi klien, dan server mengirimkan sertifikat ke klien untuk klien untuk memverifikasi server. 

Dalam Apache Kafka yang dikelola sendiri, Lambda bertindak sebagai klien. Anda mengonfigurasi sertifikat klien (sebagai rahasia di Secrets Manager) untuk mengautentikasi Lambda dengan broker Kafka Anda. Sertifikat klien harus ditandatangani oleh CA di toko kepercayaan server.

Cluster Kafka mengirimkan sertifikat server ke Lambda untuk mengautentikasi broker Kafka dengan Lambda. Sertifikat server dapat berupa sertifikat CA publik atau sertifikat CA/self-signed certificate. The public CA certificate must be signed by a certificate authority (CA) that's in the Lambda trust store. For a private CA/self yang ditandatangani pribadi, Anda mengonfigurasi sertifikat CA root server (sebagai rahasia di Secrets Manager). Lambda menggunakan sertifikat root untuk memverifikasi broker Kafka.

Untuk informasi selengkapnya tentang mTL, lihat [Memperkenalkan autentikasi TLS timbal balik untuk Amazon MSK sebagai sumber acara](https://aws.amazon.com/blogs/compute/introducing-mutual-tls-authentication-for-amazon-msk-as-an-event-source).

## Mengkonfigurasi rahasia sertifikat klien
<a name="smaa-auth-secret"></a>

Rahasia CLIENT\$1CERTIFICATE\$1TLS\$1AUTH memerlukan bidang sertifikat dan bidang kunci pribadi. Untuk kunci pribadi terenkripsi, rahasianya memerlukan kata sandi kunci pribadi. Baik sertifikat dan kunci pribadi harus dalam format PEM.

**catatan**  
Lambda mendukung [PBES1](https://datatracker.ietf.org/doc/html/rfc2898/#section-6.1)(tetapi tidak PBES2) algoritma enkripsi kunci pribadi.

Bidang sertifikat harus berisi daftar sertifikat, dimulai dengan sertifikat klien, diikuti oleh sertifikat perantara, dan diakhiri dengan sertifikat root. Setiap sertifikat harus dimulai pada baris baru dengan struktur berikut:

```
-----BEGIN CERTIFICATE-----  
            <certificate contents>
-----END CERTIFICATE-----
```

Secrets Manager mendukung rahasia hingga 65.536 byte, yang merupakan ruang yang cukup untuk rantai sertifikat yang panjang.

Kunci pribadi harus dalam format [PKCS \$18](https://datatracker.ietf.org/doc/html/rfc5208), dengan struktur berikut:

```
-----BEGIN PRIVATE KEY-----  
             <private key contents>
-----END PRIVATE KEY-----
```

Untuk kunci pribadi terenkripsi, gunakan struktur berikut:

```
-----BEGIN ENCRYPTED PRIVATE KEY-----  
              <private key contents>
-----END ENCRYPTED PRIVATE KEY-----
```

Contoh berikut menunjukkan isi rahasia untuk otentikasi mTLS menggunakan kunci pribadi terenkripsi. Untuk kunci pribadi terenkripsi, sertakan kata sandi kunci pribadi dalam rahasia.

```
{"privateKeyPassword":"testpassword",
"certificate":"-----BEGIN CERTIFICATE-----
MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
...
j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk
cmUuiAii9R0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
...
rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no
c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
-----END CERTIFICATE-----",
"privateKey":"-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp
...
QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ
zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
-----END ENCRYPTED PRIVATE KEY-----"
}
```

## Mengkonfigurasi rahasia sertifikat CA root server
<a name="smaa-auth-ca-cert"></a>

Anda membuat rahasia ini jika broker Kafka Anda menggunakan enkripsi TLS dengan sertifikat yang ditandatangani oleh CA pribadi. Anda dapat menggunakan enkripsi TLS untuk VPCSASL/SCRAM, SASL/PLAIN,, atau otentikasi mTLS.

Rahasia sertifikat CA root server memerlukan bidang yang berisi sertifikat CA root broker Kafka dalam format PEM. Contoh berikut menunjukkan struktur rahasia.

```
{"certificate":"-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dG...
-----END CERTIFICATE-----"
}
```

# Membuat pemetaan sumber acara Lambda untuk sumber acara Apache Kafka yang dikelola sendiri
<a name="kafka-esm-create"></a>

[Untuk membuat pemetaan sumber peristiwa, Anda dapat menggunakan konsol Lambda, [AWS Command Line Interface (CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)), atau SDK.AWS](https://aws.amazon.com/getting-started/tools-sdks/)

Langkah-langkah konsol berikut menambahkan cluster Apache Kafka yang dikelola sendiri sebagai pemicu fungsi Lambda Anda. Di bawah tenda, ini menciptakan sumber daya pemetaan sumber peristiwa.

## Prasyarat
<a name="kafka-esm-prereqs"></a>
+ Klaster Apache Kafka yang dikelola sendiri. Lambda mendukung Apache Kafka versi 0.10.1.0 dan yang lebih baru.
+ [Peran eksekusi](lambda-intro-execution-role.md) dengan izin untuk mengakses AWS sumber daya yang digunakan cluster Kafka yang dikelola sendiri oleh Anda.

## Menambahkan klaster Kafka yang dikelola sendiri (konsol)
<a name="kafka-esm-console"></a>

Ikuti langkah-langkah untuk menambahkan klaster Apache Kafka yang dikelola sendiri dan topik Kafka sebagai pemicu untuk fungsi Lambda Anda.

**Untuk menambahkan pemicu Apache Kafka untuk fungsi Lambda Anda (konsol)**

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

1. Pilih nama fungsi Lambda Anda.

1. Di bagian **Gambaran umum fungsi**, pilih **Tambah pemicu**.

1. Pada **Konfigurasi pemicu**, lakukan hal berikut:

   1. Pilih jenis pemicu **Apache Kafka**.

   1. Untuk **Server bootstrap**, masukkan alamat pasangan host dan port broker Kafka di klaster Anda, lalu pilih **Tambahkan**. Ulangi untuk setiap broker Kafka di klaster.

   1. Untuk **Nama topik**, masukkan nama topik Kafka yang digunakan untuk menyimpan catatan dalam klaster.

   1. Jika Anda mengonfigurasi mode yang disediakan, masukkan nilai untuk poller **peristiwa Minimum, nilai untuk poller** **peristiwa maksimum**, dan nilai opsional PollerGroupName untuk menentukan pengelompokan beberapa ESMs dalam VPC sumber peristiwa yang sama.

   1. (Opsional) Untuk **Ukuran batch**, masukkan jumlah maksimum catatan yang akan diterima dalam satu batch.

   1. Untuk **jendela Batch**, masukkan jumlah maksimum detik yang dihabiskan Lambda untuk mengumpulkan catatan sebelum menjalankan fungsi.

   1. (Opsional) Untuk **ID grup Konsumen**, masukkan ID grup konsumen Kafka untuk bergabung.

   1. (Opsional) Untuk **posisi Mulai**, pilih **Terbaru** untuk mulai membaca aliran dari catatan terbaru, **Potong cakrawala** untuk memulai pada catatan paling awal yang tersedia, atau **Pada stempel waktu untuk menentukan stempel** waktu untuk mulai membaca.

   1. (Opsional) Untuk **VPC**, pilih Amazon VPC untuk cluster Kafka Anda. **Kemudian, pilih **subnet VPC dan grup keamanan** VPC.**

      Pengaturan ini diperlukan jika hanya pengguna dalam VPC Anda yang mengakses broker Anda.

      

   1. (Opsional) Untuk **Otentikasi**, pilih **Tambah**, lalu lakukan hal berikut:

      1. Pilih protokol akses atau otentikasi broker Kafka di cluster Anda.
         + **Jika broker Kafka Anda menggunakan SASL/PLAIN otentikasi, pilih BASIC\$1AUTH.**
         + Jika broker Anda menggunakan SASL/SCRAM otentikasi, pilih salah satu **SASL\$1SCRAM**protokol.
         + **Jika Anda mengonfigurasi otentikasi mTLS, pilih protokol CLIENT\$1CERTIFICATE\$1TLS\$1AUTH.**

      1. Untuk SASL/SCRAM atau otentikasi mTLS, pilih kunci rahasia Secrets Manager yang berisi kredensyal untuk cluster Kafka Anda.

   1. (Opsional) Untuk **Enkripsi**, pilih rahasia Secrets Manager yang berisi sertifikat CA root yang digunakan broker Kafka Anda untuk enkripsi TLS, jika broker Kafka Anda menggunakan sertifikat yang ditandatangani oleh CA pribadi.

      Pengaturan ini berlaku untuk enkripsi TLS untuk SASL/SCRAM atau SASL/PLAIN, dan untuk otentikasi mTLS.

   1. Untuk membuat pemicu dalam status nonaktif untuk pengujian (disarankan), hapus **Aktifkan pemicu**. Atau, untuk segera mengaktifkan pemicu, pilih **Aktifkan pemicu**.

1. Untuk membuat pemicu, pilih **Tambahkan**.

## Menambahkan klaster Kafka yang dikelola sendiri (AWS CLI)
<a name="kafka-esm-cli"></a>

Gunakan contoh AWS CLI perintah berikut untuk membuat dan melihat pemicu Apache Kafka yang dikelola sendiri untuk fungsi Lambda Anda.

### Menggunakan SASL/SCRAM
<a name="kafka-esm-cli-create"></a>

Jika pengguna Kafka mengakses broker Kafka Anda melalui internet, tentukan rahasia Secrets Manager yang Anda buat untuk SASL/SCRAM otentikasi. Contoh berikut menggunakan [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html) AWS CLI perintah untuk memetakan fungsi Lambda bernama `my-kafka-function` ke topik Kafka bernama. `AWSKafkaTopic`

```
aws lambda create-event-source-mapping \ 
  --topics AWSKafkaTopic \
  --source-access-configuration Type=SASL_SCRAM_512_AUTH,URI=arn:aws:secretsmanager:us-east-1:111122223333:secret:MyBrokerSecretName \
  --function-name arn:aws:lambda:us-east-1:111122223333:function:my-kafka-function \
  --self-managed-event-source '{"Endpoints":{"KAFKA_BOOTSTRAP_SERVERS":["abc3.xyz.com:9092", "abc2.xyz.com:9092"]}}'
```

### Menggunakan VPC
<a name="kafka-esm-cli-create-vpc"></a>

Jika hanya Kafka pengguna dalam VPC Anda yang mengakses broker Kafka Anda, Anda harus menentukan VPC, subnet, dan grup keamanan VPC Anda. Contoh berikut menggunakan [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html) AWS CLI perintah untuk memetakan fungsi Lambda bernama `my-kafka-function` ke topik Kafka bernama. `AWSKafkaTopic`

```
aws lambda create-event-source-mapping \ 
  --topics AWSKafkaTopic \
  --source-access-configuration '[{"Type": "VPC_SUBNET", "URI": "subnet:subnet-0011001100"}, {"Type": "VPC_SUBNET", "URI": "subnet:subnet-0022002200"}, {"Type": "VPC_SECURITY_GROUP", "URI": "security_group:sg-0123456789"}]' \
  --function-name arn:aws:lambda:us-east-1:111122223333:function:my-kafka-function \
  --self-managed-event-source '{"Endpoints":{"KAFKA_BOOTSTRAP_SERVERS":["abc3.xyz.com:9092", "abc2.xyz.com:9092"]}}'
```

### Melihat status menggunakan AWS CLI
<a name="kafka-esm-cli-view"></a>

Contoh berikut menggunakan [get-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-event-source-mapping.html) AWS CLI perintah untuk menggambarkan status pemetaan sumber peristiwa yang Anda buat.

```
aws lambda get-event-source-mapping
              --uuid dh38738e-992b-343a-1077-3478934hjkfd7
```

# Semua parameter konfigurasi sumber acara Apache Kafka yang dikelola sendiri di Lambda
<a name="kafka-esm-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 Apache Kafka yang dikelola sendiri, seperti yang ditunjukkan pada tabel berikut.


| Parameter | Diperlukan | Default | Catatan | 
| --- | --- | --- | --- | 
|  BatchSize  |  T  |  100  |  Maksimum: 10.000.  | 
|  DestinationConfig  |  T  |  N/A  |  [Menangkap batch yang dibuang untuk Amazon MSK dan sumber acara Apache Kafka yang dikelola sendiri](kafka-on-failure.md)  | 
|  Diaktifkan  |  T  |  True  |  | 
|  FilterCriteria  |  T  |  N/A  |  [Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md)  | 
|  FunctionName  |  Y  |  N/A  |    | 
|  KMSKeyArn  |  T  |  N/A  |  [Enkripsi kriteria filter](invocation-eventfiltering.md#filter-criteria-encryption)  | 
|  MaximumBatchingWindowInSeconds  |  T  |  500 ms  |  [Perilaku batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching)  | 
|  ProvisionedPollersConfig  |  T  |  `MinimumPollers`: nilai default 1 jika tidak ditentukan `MaximumPollers`: nilai default 200 jika tidak ditentukan `PollerGroupName`: N/A  |  [Mode yang disediakan](kafka-scaling-modes.md#kafka-provisioned-mode)  | 
|  SelfManagedEventSource  |  Y  | N/A |  Daftar Broker Kafka. Hanya dapat mengatur di Create  | 
|  SelfManagedKafkaEventSourceConfig  |  T  |  Berisi ConsumerGroupId bidang yang default ke nilai unik.  |  Hanya dapat mengatur di Create  | 
|  SourceAccessConfigurations  |  T  |  Tidak ada kredenensi  |  Informasi VPC atau kredensial autentikasi untuk klaster   Untuk SASL\$1PLAIN, setel ke BASIC\$1AUTH  | 
|  StartingPosition  |  Y  |  N/A  |  AT\$1TIMESTAMP, TRIM\$1HORIZON, atau TERBARU Hanya dapat mengatur di Create  | 
|  StartingPositionTimestamp  |  T  |  N/A  |  Diperlukan jika StartingPosition disetel ke AT\$1TIMESTAMP  | 
|  Tanda  |  T  |  N/A  |  [Menggunakan tag pada pemetaan sumber acara](tags-esm.md)  | 
|  Topik  |  Y  |  N/A  |  Nama topik Hanya dapat mengatur di Create  | 

**catatan**  
Saat Anda menentukan`PollerGroupName`, beberapa ESMs dalam VPC Amazon yang sama dapat berbagi kapasitas Event Poller Unit (EPU). Anda dapat menggunakan opsi ini untuk mengoptimalkan biaya mode Provisioned untuk Anda. ESMs Persyaratan untuk pengelompokan ESM:  
ESMs harus berada dalam VPC Amazon yang sama
Maksimal 100 ESMs per kelompok poller
Agregat poller maksimum ESMs di semua kelompok tidak boleh melebihi 2000
Anda dapat memperbarui `PollerGroupName` untuk memindahkan ESM ke grup lain, atau menghapus ESM dari grup dengan menyetel `PollerGroupName` ke string kosong (“”).