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
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 EC2 instance Amazon. 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, lihatBuat logika penyediaan khusus dengan sumber daya khusus. Untuk informasi tentang Amazon SNS dan cara kerjanya, lihat Panduan Pengembang Layanan Pemberitahuan Sederhana Amazon.
Menggunakan Amazon SNS untuk membuat sumber daya khusus
Langkah 1: Pembuatan tumpukan
-
Pengembang template membuat CloudFormation tumpukan yang berisi sumber daya khusus.
Dalam contoh template di bawah ini, kita menggunakan nama jenis sumber daya kustom
Custom::untuk sumber daya kustom dengan ID logisSeleniumTester. Nama jenis sumber daya kustom harus alfanumerik dan dapat memiliki panjang maksimum 60 karakter.MySeleniumTestJenis sumber daya kustom dideklarasikan dengan token layanan, properti khusus penyedia opsional, dan GetAtt atribut Fn:: 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
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.Fn::GetAtt -
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
ServiceTokenproperti. Untuk menghindari penggunaan nilai hardcode, pengembang template dapat menggunakan parameter template sehingga nilai dimasukkan pada saat tumpukan diluncurkan.Contoh berikut menunjukkan permintaan
Createsumber daya kustom yang mencakup nama jenis sumber daya kustom,Custom::SeleniumTester, yang dibuat denganLogicalResourceIddariMySeleniumTester:{ "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "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
Createpermintaan, lihat Buat permintaan untuk sumber daya CloudFormation khusus topik. -
Penyedia sumber daya kustom memproses data yang dikirim oleh pengembang template dan menentukan apakah
Createpermintaan berhasil. Penyedia sumber daya kemudian menggunakan URL S3 yang dikirim oleh CloudFormation untuk mengirim respons salah satuSUCCESSatauFAILED.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 Tipe permintaan sumber daya khusus 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
yang digunakan dengan sumber daya kustom dalam templat tumpukan. Nilai adalah data yang dikembalikan ketika pengembang template memanggilFn::GetAttsumber daya dengan nama atribut.Fn::GetAttBerikut ini adalah contoh respons sumber daya kustom:
{ "Status" : "SUCCESS", "PhysicalResourceId" : "Tester1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MySeleniumTester", "Data" : { "resultsPage" : "http://www.myexampledomain/test-results/guid", "lastUpdate" : "2012-11-14T03:30Z" } }Untuk informasi rinci tentang objek respons untuk
Createpermintaan, lihat Buat permintaan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceIdBidangStackIdRequestId,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
CREATE_COMPLETEatauCREATE_FAILED. Jika tumpukan berhasil dibuat, pengembang template dapat menggunakan nilai output dari sumber daya kustom yang dibuat dengan mengaksesnya dengan Fn::. GetAttSebagai contoh, templat sumber daya kustom yang digunakan untuk ilustrasi menggunakan
untuk menyalin output sumber daya ke dalam output tumpukan:Fn::GetAtt"Outputs" : { "topItem" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] } }, "numRespondents" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] } } }
Langkah 2: Pembaruan tumpukan
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.
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 padaLangkah 3: Penghapusan tumpukan.
catatan
Jika Anda tidak membuat perubahan pada sumber daya kustom, CloudFormation tidak akan mengirim permintaan ke sana selama pembaruan tumpukan.
-
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
Updateke 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"] } } } } -
CloudFormation mengirimkan pemberitahuan Amazon SNS ke penyedia sumber daya dengan
"RequestType" : "Update"yang berisi informasi serupa denganCreatepanggilan, kecuali bahwaOldResourcePropertiesbidang berisi properti sumber daya lama, dan ResourceProperties berisi properti sumber daya yang diperbarui (jika ada).Berikut ini adalah contoh permintaan
Update:{ "RequestType" : "Update", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "ResourceType" : "Custom::SeleniumTester", "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
Updatepermintaan, lihat Permintaan pembaruan untuk sumber daya CloudFormation khusus topik. -
Penyedia sumber daya khusus memproses data yang dikirim oleh CloudFormation. Sumber daya kustom melakukan pembaruan dan mengirimkan respons dari salah satu
SUCCESSatauFAILEDke URL S3. CloudFormation kemudian membandingkan sumber daya kustom lama dan baru.PhysicalResourceIDsJika berbeda, CloudFormation mengakui bahwa pembaruan memerlukan penggantian dan mengirimkan permintaan hapus ke sumber daya lama. Contoh berikut menunjukkan respon penyedia sumber daya kustom untukUpdatepermintaan.{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester2" }Untuk informasi rinci tentang objek respons untuk
Updatepermintaan, lihat Permintaan pembaruan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceIdBidangStackIdRequestId,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
UPDATE_COMPLETEatauUPDATE_FAILED. Jika pembaruan gagal, tumpukan akan kembali. Jika tumpukan berhasil diperbarui, pengembang template dapat mengakses nilai keluaran baru dari sumber daya kustom yang dibuat dengan.Fn::GetAtt
Langkah 3: Penghapusan tumpukan
-
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.
-
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
PhysicalResourceIdantara 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 contohDeletepermintaan berikut.{ "RequestType" : "Delete", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this delete request", "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
Deletepermintaan, lihat Hapus permintaan untuk sumber daya CloudFormation khusus topik.DescribeStackResource,DescribeStackResources, danListStackResourcesmenampilkan nama yang ditetapkan pengguna jika telah ditentukan. -
Penyedia sumber daya kustom memproses data yang dikirim oleh CloudFormation dan menentukan apakah
Deletepermintaan berhasil. Penyedia sumber daya kemudian menggunakan URL S3 yang dikirim oleh CloudFormation untuk mengirim respons salah satuSUCCESSatauFAILED. 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
Deletepermintaan:{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this delete request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester1" }Untuk informasi rinci tentang objek respons untuk
Deletepermintaan, lihat Hapus permintaan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceIdBidangStackIdRequestId,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
DELETE_COMPLETEatauDELETE_FAILED.