Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sumber daya kustom SNS yang didukung Amazon
Topik berikut menunjukkan cara mengonfigurasi sumber daya kustom dengan token layanan yang menentukan SNS topik Amazon yang CloudFormation 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 AmazonSNS, 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 instans Amazon. SNSPemberitahuan Amazon 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 SNS topik Amazon sebagai target sumber daya kustom, CloudFormation mengirim pesan ke SNS topik 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.MySeleniumTest
Jenis sumber daya kustom dideklarasikan dengan token layanan, properti khusus penyedia opsional, dan Fn::GetAtt atribut 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 SNS topik Amazon 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 kustom adalah pihak ketiga, maka pengembang templat harus mendapatkan nama nilai pengembalian ini dari penyedia sumber daya khusus.Fn::GetAtt
-
CloudFormation mengirimkan SNS notifikasi Amazon ke penyedia sumber daya dengan
"RequestType" : "Create"
yang berisi informasi tentang tumpukan, properti sumber daya khusus dari template tumpukan, dan S3 URL untuk respons.SNSTopik 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 denganLogicalResourceId
dariMySeleniumTester
:{ "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
Create
permintaan, lihat Buat permintaan untuk sumber daya CloudFormation khusus topiknya. -
Penyedia sumber daya kustom memproses data yang dikirim oleh pengembang template dan menentukan apakah
Create
permintaan berhasil. Penyedia sumber daya kemudian menggunakan S3 yang URL dikirim oleh CloudFormation untuk mengirim respons salah satuSUCCESS
atauFAILED
.Tergantung pada jenis respons, bidang respons yang berbeda akan diharapkan 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::GetAtt
sumber daya dengan nama atribut.Fn::GetAtt
Berikut 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
Create
permintaan, lihat Buat permintaan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceId
BidangStackId
RequestId
,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
CREATE_COMPLETE
atauCREATE_FAILED
. Jika tumpukan berhasil dibuat, pengembang template dapat menggunakan nilai output dari sumber daya kustom yang dibuat dengan mengaksesnya. 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 template yang menentukan pembaruan untuk properti sumber daya dalam tumpukan, seperti yang ditunjukkan pada contoh di bawah ini. CloudFormationmemperbarui hanya sumber daya yang memiliki perubahan yang ditentukan dalam template. 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. Ketika CloudFormation menerima respons, ia 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
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"] } } } } -
CloudFormation mengirimkan SNS pemberitahuan Amazon ke penyedia sumber daya dengan
"RequestType" : "Update"
yang berisi informasi serupa denganCreate
panggilan, kecuali bahwaOldResourceProperties
bidang 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
Update
permintaan, lihat Permintaan pembaruan untuk sumber daya CloudFormation khusus topiknya. -
Penyedia sumber daya khusus memproses data yang dikirim oleh CloudFormation. Sumber daya kustom melakukan pembaruan dan mengirimkan respons salah satu
SUCCESS
atauFAILED
ke S3URL. 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 untukUpdate
permintaan.{ "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
Update
permintaan, lihat Permintaan pembaruan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceId
BidangStackId
RequestId
,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
UPDATE_COMPLETE
atauUPDATE_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
-
Pengembang template menghapus tumpukan yang berisi sumber daya khusus. CloudFormationmendapatkan properti saat ini yang ditentukan dalam template tumpukan bersama dengan SNS topik, dan bersiap untuk membuat permintaan ke penyedia sumber daya khusus.
-
CloudFormation mengirimkan SNS notifikasi Amazon ke penyedia sumber daya dengan
"RequestType" : "Delete"
yang berisi informasi terkini tentang tumpukan, properti sumber daya khusus dari template tumpukan, dan S3 URL 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 contohDelete
permintaan 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
Delete
permintaan, lihat Hapus permintaan untuk sumber daya CloudFormation khusus topiknya.DescribeStackResource
,DescribeStackResources
, danListStackResources
menampilkan nama yang ditetapkan pengguna jika telah ditentukan. -
Penyedia sumber daya kustom memproses data yang dikirim oleh CloudFormation dan menentukan apakah
Delete
permintaan berhasil. Penyedia sumber daya kemudian menggunakan S3 yang URL dikirim oleh CloudFormation untuk mengirim respons salah satuSUCCESS
atauFAILED
. 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", "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
Delete
permintaan, lihat Hapus permintaan untuk sumber daya CloudFormation khusus topiknya.LogicalResourceId
BidangStackId
RequestId
,, dan harus disalin kata demi kata dari permintaan. -
CloudFormation mendeklarasikan status tumpukan sebagai
DELETE_COMPLETE
atauDELETE_FAILED
.