

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

# Sumber daya khusus yang didukung Amazon SNS
<a name="template-custom-resources-sns"></a>

Topik berikut menunjukkan cara mengonfigurasi sumber daya kustom dengan token layanan yang menentukan topik Amazon SNS CloudFormation yang mengirimkan permintaan. Anda juga mempelajari urutan peristiwa dan pesan yang dikirim dan diterima sebagai hasil dari pembuatan, pembaruan, dan penghapusan tumpukan sumber daya kustom.

Dengan sumber daya khusus dan Amazon SNS, Anda dapat mengaktifkan skenario seperti menambahkan sumber daya baru ke tumpukan dan menyuntikkan data dinamis ke dalam tumpukan. Misalnya, saat Anda membuat tumpukan, CloudFormation dapat mengirim `Create` permintaan ke topik yang dipantau oleh aplikasi yang berjalan di instans Amazon EC2. Notifikasi Amazon SNS memicu aplikasi untuk melakukan tugas penyediaan tambahan, seperti mengambil kumpulan alamat IP Elastis yang terdaftar yang diizinkan. Setelah selesai, aplikasi mengirimkan respons (dan data keluaran apa pun) yang memberi tahu CloudFormation untuk melanjutkan operasi tumpukan.

Saat Anda menentukan topik Amazon SNS sebagai target sumber daya kustom, CloudFormation mengirim pesan ke topik SNS yang ditentukan selama operasi tumpukan yang melibatkan sumber daya kustom. Untuk memproses pesan ini dan melakukan tindakan yang diperlukan, Anda harus memiliki titik akhir yang didukung berlangganan topik SNS.

Untuk pengenalan sumber daya khusus dan cara kerjanya, lihat[Cara kerja sumber daya kustom](template-custom-resources.md#how-custom-resources-work). Untuk informasi tentang Amazon SNS dan cara kerjanya, lihat Panduan [Pengembang Layanan Pemberitahuan Sederhana Amazon](https://docs.aws.amazon.com/sns/latest/dg/).

## Menggunakan Amazon SNS untuk membuat sumber daya khusus
<a name="walkthrough-custom-resources-sns-adding-nonaws-resource"></a>

**Topics**
+ [Langkah 1: Pembuatan tumpukan](#crpg-walkthrough-stack-creation)
+ [Langkah 2: Pembaruan tumpukan](#crpg-walkthrough-stack-updates)
+ [Langkah 3: Penghapusan tumpukan](#crpg-walkthrough-stack-deletion)

### Langkah 1: Pembuatan tumpukan
<a name="crpg-walkthrough-stack-creation"></a>

1. <a name="crpg-walkthrough-stack-creation-customer-template"></a>Pengembang template membuat CloudFormation tumpukan yang berisi sumber daya khusus. 

   Dalam contoh template di bawah ini, kita menggunakan nama jenis sumber daya kustom `Custom::SeleniumTester` untuk sumber daya kustom dengan ID logis`MySeleniumTest`. Nama jenis sumber daya kustom harus alfanumerik dan dapat memiliki panjang maksimum 60 karakter. 

   Jenis sumber daya kustom dideklarasikan dengan token layanan, properti khusus penyedia opsional, dan GetAtt atribut [Fn::](resources-section-structure.md#resource-properties-getatt) opsional yang ditentukan oleh penyedia sumber daya kustom. Properti dan atribut ini dapat digunakan untuk meneruskan informasi dari pengembang template ke penyedia sumber daya khusus dan sebaliknya. Token layanan menentukan topik Amazon SNS yang telah dikonfigurasi oleh penyedia sumber daya.

   ```
   {
      "AWSTemplateFormatVersion" : "2010-09-09",
      "Resources" : {
         "MySeleniumTest" : {
            "Type": "Custom::SeleniumTester",
            "Version" : "1.0",
            "Properties" : {
               "ServiceToken": "arn:aws:sns:us-west-2:123456789012:CRTest",
               "seleniumTester" : "SeleniumTest()",
               "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ],
               "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
            }
         }
      },
      "Outputs" : {
         "topItem" : {
            "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] }
         },
         "numRespondents" : {
            "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] }
         }
      }
   }
   ```
**catatan**  
Nama dan nilai data yang diakses `Fn::GetAtt` dikembalikan oleh penyedia sumber daya kustom selama respons penyedia CloudFormation. Jika penyedia sumber daya khusus adalah pihak ketiga, maka pengembang templat harus mendapatkan nama nilai pengembalian ini dari penyedia sumber daya khusus.

1. <a name="crpg-walkthrough-stack-creation-provider-request"></a>CloudFormation mengirimkan notifikasi Amazon SNS ke penyedia sumber daya dengan `"RequestType" : "Create"` yang berisi informasi tentang tumpukan, properti sumber daya khusus dari templat tumpukan, dan URL S3 untuk respons.

   Topik SNS yang digunakan untuk mengirim notifikasi disematkan dalam template di `ServiceToken` properti. Untuk menghindari penggunaan nilai hardcode, pengembang template dapat menggunakan parameter template sehingga nilai dimasukkan pada saat tumpukan diluncurkan.

   Contoh berikut menunjukkan permintaan `Create` sumber daya kustom yang mencakup nama jenis sumber daya kustom, `Custom::SeleniumTester`, yang dibuat dengan `LogicalResourceId` dari `MySeleniumTester`:

   ```
   {
      "RequestType" : "Create",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "ResourceType" : "Custom::SeleniumTester",
      "LogicalResourceId" : "MySeleniumTester",
      "ResourceProperties" : {
         "seleniumTester" : "SeleniumTest()",
         "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ],
         "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
      }
   }
   ```

   Untuk informasi rinci tentang objek permintaan untuk `Create` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

1. <a name="crpg-walkthrough-stack-creation-provider-response"></a>Penyedia sumber daya kustom memproses data yang dikirim oleh pengembang template dan menentukan apakah `Create` permintaan berhasil. Penyedia sumber daya kemudian menggunakan URL S3 yang dikirim oleh CloudFormation untuk mengirim respons salah satu `SUCCESS` atau`FAILED`.

   Tergantung pada jenis respons, bidang respon yang berbeda akan diperkirakan oleh CloudFormation. Untuk informasi tentang bidang respons untuk jenis permintaan tertentu, lihat dokumentasi untuk jenis permintaan tersebut di [Referensi permintaan dan respons](crpg-ref.md) bagian.

   Menanggapi permintaan buat atau perbarui, penyedia sumber daya kustom dapat mengembalikan elemen data di `Data` bidang respons. Ini adalah pasangan nilai nama, dan *nama* sesuai dengan atribut `Fn::GetAtt` yang digunakan dengan sumber daya kustom dalam templat tumpukan. *Nilai* adalah data yang dikembalikan ketika pengembang template memanggil `Fn::GetAtt` sumber daya dengan nama atribut.

   Berikut ini adalah contoh respons sumber daya kustom:

   ```
   {
      "Status" : "SUCCESS",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1",
      "Data" : {
         "resultsPage" : "http://www.myexampledomain/test-results/guid",
         "lastUpdate" : "2012-11-14T03:30Z"
      }
   }
   ```

   Untuk informasi rinci tentang objek respons untuk `Create` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

   `LogicalResourceId`Bidang `StackId``RequestId`,, dan harus disalin kata demi kata dari permintaan.

1. <a name="crpg-walkthrough-stack-creation-stack-status"></a> CloudFormation mendeklarasikan status tumpukan sebagai `CREATE_COMPLETE` atau`CREATE_FAILED`. Jika tumpukan berhasil dibuat, pengembang template dapat menggunakan nilai output dari sumber daya kustom yang dibuat dengan mengaksesnya dengan [Fn::](resources-section-structure.md#resource-properties-getatt). GetAtt

   Sebagai contoh, templat sumber daya kustom yang digunakan untuk ilustrasi menggunakan `Fn::GetAtt` untuk menyalin output sumber daya ke dalam output tumpukan:

   ```
   "Outputs" : {
      "topItem" : {
         "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] }
      },
      "numRespondents" : {
         "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] }
      }
   }
   ```

### Langkah 2: Pembaruan tumpukan
<a name="crpg-walkthrough-stack-updates"></a>

Untuk memperbarui tumpukan yang ada, Anda harus mengirimkan templat yang menentukan pembaruan untuk properti sumber daya dalam tumpukan, seperti yang ditunjukkan pada contoh di bawah ini. CloudFormation hanya memperbarui sumber daya yang memiliki perubahan yang ditentukan dalam templat. Untuk informasi selengkapnya, lihat [Memahami perilaku pembaruan sumber daya tumpukan](using-cfn-updating-stacks-update-behaviors.md).

Anda dapat memperbarui sumber daya kustom yang memerlukan penggantian sumber daya fisik pokok. Saat Anda memperbarui sumber daya kustom dalam CloudFormation templat, CloudFormation kirimkan permintaan pembaruan ke sumber daya kustom tersebut. Jika sumber daya kustom memerlukan pengganti, sumber daya kustom baru harus mengirim respons dengan ID fisik baru. Saat CloudFormation menerima respons, itu membandingkan `PhysicalResourceId` antara sumber daya kustom lama dan baru. Jika berbeda, CloudFormation mengenali pembaruan sebagai pengganti dan mengirimkan permintaan hapus ke sumber daya lama, seperti yang ditunjukkan pada[Langkah 3: Penghapusan tumpukan](#crpg-walkthrough-stack-deletion).

**catatan**  
Jika Anda tidak membuat perubahan pada sumber daya kustom, CloudFormation tidak akan mengirim permintaan ke sana selama pembaruan tumpukan.

1. <a name="crpg-walkthrough-stack-updates-customer-template"></a>Pengembang template memulai pembaruan ke tumpukan yang berisi sumber daya khusus. Selama pembaruan, pengembang template dapat menentukan Properti baru di template tumpukan.

   Berikut ini adalah contoh `Update` ke templat tumpukan menggunakan jenis sumber daya kustom:

   ```
   {
      "AWSTemplateFormatVersion" : "2010-09-09",
      "Resources" : {
         "MySeleniumTest" : {
            "Type": "Custom::SeleniumTester",
            "Version" : "1.0",
            "Properties" : {
               "ServiceToken": "arn:aws:sns:us-west-2:123456789012:CRTest",
               "seleniumTester" : "SeleniumTest()",
               "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com",
                  "http://mynewsite.com" ],
               "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ]
            }
         }
      },
      "Outputs" : {
         "topItem" : {
            "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] }
         },
         "numRespondents" : {
            "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] }
         }
      }
   }
   ```

1. <a name="crpg-walkthrough-stack-updates-provider-request"></a>CloudFormation mengirimkan pemberitahuan Amazon SNS ke penyedia sumber daya dengan `"RequestType" : "Update"` yang berisi informasi serupa dengan `Create` panggilan, kecuali bahwa `OldResourceProperties` bidang berisi properti sumber daya lama, dan ResourceProperties berisi properti sumber daya yang diperbarui (jika ada).

   Berikut ini adalah contoh permintaan `Update`:

   ```
   {
      "RequestType" : "Update",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "ResourceType" : "Custom::SeleniumTester",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1",
      "ResourceProperties" : {
         "seleniumTester" : "SeleniumTest()",
         "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com",
            "http://mynewsite.com" ],
         "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ]
      },
      "OldResourceProperties" : {
         "seleniumTester" : "SeleniumTest()",
         "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ],
         "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
      }
   }
   ```

   Untuk informasi rinci tentang objek permintaan untuk `Update` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

1. <a name="crpg-walkthrough-stack-updates-provider-response"></a>Penyedia sumber daya khusus memproses data yang dikirim oleh CloudFormation. Sumber daya kustom melakukan pembaruan dan mengirimkan respons dari salah satu `SUCCESS` atau `FAILED` ke URL S3. CloudFormation kemudian membandingkan sumber daya kustom lama dan baru. `PhysicalResourceIDs` Jika berbeda, CloudFormation mengakui bahwa pembaruan memerlukan penggantian dan mengirimkan permintaan hapus ke sumber daya lama. Contoh berikut menunjukkan respon penyedia sumber daya kustom untuk `Update` permintaan.

   ```
   {
      "Status" : "SUCCESS",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester2"
   }
   ```

   Untuk informasi rinci tentang objek respons untuk `Update` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

   `LogicalResourceId`Bidang `StackId``RequestId`,, dan harus disalin kata demi kata dari permintaan.

1. <a name="crpg-walkthrough-stack-updates-stack-status"></a>CloudFormation mendeklarasikan status tumpukan sebagai `UPDATE_COMPLETE` atau`UPDATE_FAILED`. Jika pembaruan gagal, tumpukan akan kembali. Jika tumpukan berhasil diperbarui, pengembang templat dapat mengakses nilai keluaran baru apa pun dari sumber daya kustom yang dibuat dengannya`Fn::GetAtt`.

### Langkah 3: Penghapusan tumpukan
<a name="crpg-walkthrough-stack-deletion"></a>

1. <a name="crpg-walkthrough-stack-deletion-customer-template"></a>Pengembang template menghapus tumpukan yang berisi sumber daya khusus. CloudFormationmendapatkan properti saat ini yang ditentukan dalam template tumpukan bersama dengan topik SNS, dan bersiap untuk membuat permintaan ke penyedia sumber daya khusus.

1. <a name="crpg-walkthrough-stack-deletion-provider-request"></a>CloudFormation mengirimkan notifikasi Amazon SNS ke penyedia sumber daya dengan `"RequestType" : "Delete"` yang berisi informasi terkini tentang tumpukan, properti sumber daya khusus dari templat tumpukan, dan URL S3 untuk respons.

   Setiap kali Anda menghapus tumpukan atau membuat pembaruan yang menghapus atau menggantikan sumber daya kustom, CloudFormation bandingkan `PhysicalResourceId` antara sumber daya kustom lama dan baru. Jika berbeda, CloudFormation mengenali pembaruan sebagai pengganti dan mengirimkan permintaan hapus untuk sumber daya lama (`OldPhysicalResource`), seperti yang ditunjukkan pada contoh `Delete` permintaan berikut.

   ```
   {
      "RequestType" : "Delete",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "ResourceType" : "Custom::SeleniumTester",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1",
      "ResourceProperties" : {
         "seleniumTester" : "SeleniumTest()",
         "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com",
            "http://mynewsite.com" ],
         "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ]
      }
   }
   ```

   Untuk informasi rinci tentang objek permintaan untuk `Delete` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

   `DescribeStackResource`, `DescribeStackResources`, dan `ListStackResources` menampilkan nama yang ditetapkan pengguna jika telah ditentukan.

1. <a name="crpg-walkthrough-stack-deletion-provider-response"></a>Penyedia sumber daya kustom memproses data yang dikirim oleh CloudFormation dan menentukan apakah `Delete` permintaan berhasil. Penyedia sumber daya kemudian menggunakan URL S3 yang dikirim oleh CloudFormation untuk mengirim respons salah satu `SUCCESS` atau`FAILED`. Agar berhasil menghapus tumpukan dengan sumber daya kustom, penyedia sumber daya kustom harus berhasil merespons permintaan penghapusan.

   Berikut ini adalah contoh respons penyedia sumber daya kustom terhadap `Delete` permintaan:

   ```
   {
      "Status" : "SUCCESS",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1"
   }
   ```

   Untuk informasi rinci tentang objek respons untuk `Delete` permintaan, lihat [Referensi permintaan dan respons](crpg-ref.md) topiknya.

   `LogicalResourceId`Bidang `StackId``RequestId`,, dan harus disalin kata demi kata dari permintaan.

1. <a name="crpg-walkthrough-stack-updates-stack-status-delete"></a>CloudFormation mendeklarasikan status tumpukan sebagai `DELETE_COMPLETE` atau`DELETE_FAILED`.