

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

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

Anda dapat menggunakan fungsi Lambda untuk memproses notifikasi Amazon Simple Notification Service (Amazon SNS). Amazon SNS mendukung fungsi Lambda 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 Amazon Simple Notification Service](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 detailnya, lihat [Keandalan](https://aws.amazon.com/sns/faqs/#Reliability) di Amazon SNS FAQs.

**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 Lambda AWS
<a name="services-sns-powertools-idempotency"></a>

Utilitas idempotency dari Powertools untuk Lambda membuat fungsi AWS Lambda Anda idempoten. Ini tersedia untuk Python,, Java TypeScript, dan .NET. [https://docs.powertools.aws.dev/lambda/dotnet/utilities/idempotency/](https://docs.powertools.aws.dev/lambda/dotnet/utilities/idempotency/)

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

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

Untuk menambahkan topik SNS sebagai pemicu fungsi 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 Lambda (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di 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 Lambda
<a name="sns-trigger-manual"></a>

Untuk mengatur pemicu SNS untuk fungsi Lambda secara manual, Anda harus menyelesaikan langkah-langkah berikut:
+ Tentukan kebijakan berbasis sumber daya untuk fungsi Anda agar SNS dapat memanggilnya.
+ Berlangganan fungsi Lambda Anda ke topik Amazon SNS.
**catatan**  
Jika topik SNS dan fungsi 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 Lambda yang memungkinkan pemanggilan SNS, gunakan perintah berikut. AWS CLI Pastikan untuk mengganti nilai `--function-name` dengan nama fungsi Lambda Anda, dan nilai `--source-arn` dengan ARN topik SNS 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 nilai `--notification-endpoint` ARN dengan fungsi 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"
      }
    }
  ]
}
```