

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

# Memanggil Fungsi Acara Lambda dengan notifikasi Amazon SNS
<a name="with-sns"></a>

Anda dapat menggunakan Fungsi Peristiwa Lambda untuk memproses notifikasi Amazon Simple Notification Service (Amazon SNS). Amazon SNS mendukung Lambda Event Functions sebagai target untuk pesan yang dikirim ke topik. Anda dapat melanggankan fungsi Anda ke topik di akun yang sama atau di akun AWS lainnya. Untuk panduan terperinci, lihat. [Tutorial: Menggunakan AWS Lambda dengan Layanan Pemberitahuan Sederhana Amazon](with-sns-example.md)

Lambda mendukung pemicu SNS untuk topik SNS standar saja. Topik FIFO tidak didukung.

Lambda memproses pesan SNS secara asinkron dengan mengantri pesan dan menangani percobaan ulang. Jika Amazon SNS tidak dapat mencapai Lambda atau pesan ditolak, Amazon SNS melakukan percobaan ulang dengan interval yang diperpanjang selama beberapa jam. Untuk perinciannya, lihat [Reliabilitas](https://aws.amazon.com/sns/faqs/#Reliability) di FAQ Amazon SNS.

**Awas**  
Pemanggilan asinkron 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 

## Utilitas idempotensi dari Powertools untuk AWS Lambda
<a name="services-sns-powertools-idempotency"></a>

Utilitas idempotensi dari Powertools untuk Lambda membuat Fungsi Acara AWS Lambda Anda idempoten. Ini tersedia untuk Python,, Java TypeScript, dan .NET. [*Untuk informasi lebih lanjut, lihat [utilitas Idempotency](https://docs.aws.amazon.com/powertools/python/latest/utilities/idempotency/) dalam dokumentasi *Powertools for Lambda AWS (Python), Idempotency Utility dalam dokumentasi Powertools for Lambda ()*, [Idempotency Utility](https://docs.aws.amazon.com/powertools/typescript/2.1.1/utilities/idempotency/) dalam *dokumentasi Powertools for AWS Lambda (JavaTypeScript)**, dan [Idempotency Utility](https://docs.aws.amazon.com/powertools/java/latest/utilities/idempotency/) dalam dokumentasi Powertools for AWS Lambda (*.NET). AWS *](https://docs.aws.amazon.com/powertools/dotnet/utilities/idempotency/)

**Topics**
+ [Utilitas idempotensi dari Powertools untuk AWS Lambda](#services-sns-powertools-idempotency)
+ [Menambahkan pemicu topik Amazon SNS untuk Fungsi Peristiwa Lambda menggunakan konsol](#sns-trigger-console)
+ [Menambahkan pemicu topik Amazon SNS secara manual untuk Fungsi Peristiwa Lambda](#sns-trigger-manual)
+ [Contoh bentuk acara SNS](#sns-sample-event)
+ [Tutorial: Menggunakan AWS Lambda dengan Layanan Pemberitahuan Sederhana Amazon](with-sns-example.md)

## Menambahkan pemicu topik Amazon SNS untuk Fungsi Peristiwa Lambda menggunakan konsol
<a name="sns-trigger-console"></a>

Untuk menambahkan topik SNS sebagai pemicu Fungsi Peristiwa Lambda, cara termudah adalah dengan menggunakan konsol Lambda. Saat Anda menambahkan pemicu melalui konsol, Lambda secara otomatis mengatur izin dan langganan yang diperlukan untuk mulai menerima acara dari topik SNS.

**Untuk menambahkan topik SNS sebagai pemicu Fungsi Peristiwa Lambda (konsol)**

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

1. Pilih nama fungsi yang ingin Anda tambahkan pemicunya.

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

1. Pilih **Tambahkan pemicu**.

1. **Di bawah **konfigurasi Trigger**, di menu tarik-turun, pilih SNS.**

1. Untuk **topik SNS**, pilih topik SNS untuk berlangganan.

## Menambahkan pemicu topik Amazon SNS secara manual untuk Fungsi Peristiwa Lambda
<a name="sns-trigger-manual"></a>

Untuk mengatur pemicu SNS untuk Fungsi Peristiwa Lambda secara manual, Anda harus menyelesaikan langkah-langkah berikut:
+ Tentukan kebijakan berbasis sumber daya untuk fungsi Anda agar SNS dapat memanggilnya.
+ Berlangganan Fungsi Acara Lambda Anda ke topik Amazon SNS.
**catatan**  
Jika topik SNS dan Fungsi Acara Lambda Anda berada di akun AWS yang berbeda, Anda juga perlu memberikan izin tambahan untuk mengizinkan langganan lintas akun ke topik SNS. Untuk informasi selengkapnya, lihat [Memberikan izin lintas akun untuk langganan Amazon SNS](with-sns-example.md#with-sns-subscription-grant-permission).

Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk menyelesaikan kedua langkah ini. Pertama, untuk menentukan kebijakan berbasis sumber daya untuk Fungsi Peristiwa Lambda yang memungkinkan pemanggilan SNS, gunakan perintah berikut. AWS CLI Pastikan untuk mengganti nilai `--function-name` dengan nama Lambda Event Function Anda, dan nilai `--source-arn` dengan topik SNS ARN Anda.

```
aws lambda add-permission --function-name {{example-function}} \
    --source-arn {{arn:aws:sns:us-east-1:123456789012:sns-topic-for-lambda}} \
    --statement-id function-with-sns --action "lambda:InvokeFunction" \
    --principal sns.amazonaws.com
```

Untuk berlangganan fungsi Anda ke topik SNS, gunakan AWS CLI perintah berikut. Ganti nilai `--topic-arn` dengan ARN topik SNS Anda, dan nilainya dengan ARN Fungsi `--notification-endpoint` Acara Lambda Anda.

```
aws sns subscribe --protocol lambda \
    --region us-east-1 \
    --topic-arn {{arn:aws:sns:us-east-1:123456789012:sns-topic-for-lambda}} \
    --notification-endpoint {{arn:aws:lambda:us-east-1:123456789012:function:example-function}}
```

## Contoh bentuk acara SNS
<a name="sns-sample-event"></a>

Amazon SNS memanggil fungsi Anda [secara asinkron](invocation-async.md) dengan kejadian yang berisi pesan dan metadata.

**Example Kejadian pesan Amazon SNS**  

```
{
  "Records": [
    {
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arn:aws:sns:us-east-1:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
      "EventSource": "aws:sns",
      "Sns": {
        "SignatureVersion": "1",
        "Timestamp": "2019-01-02T12:45:07.000Z",
        "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==",
        "SigningCertURL": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem",
        "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
        "Message": "Hello from SNS!",
        "MessageAttributes": {
          "Test": {
            "Type": "String",
            "Value": "TestString"
          },
          "TestBinary": {
            "Type": "Binary",
            "Value": "TestBinary"
          }
        },
        "Type": "Notification",
        "UnsubscribeUrl": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&amp;SubscriptionArn=arn:aws:sns:us-east-1:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
        "TopicArn":"arn:aws:sns:us-east-1:123456789012:sns-lambda",
        "Subject": "TestInvoke"
      }
    }
  ]
}
```