Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat kondisi tunggu di CloudFormation template
penting
Untuk sumber daya Amazon EC2 dan Auto Scaling, sebaiknya gunakan CreationPolicy atribut alih-alih kondisi tunggu. Tambahkan CreationPolicy atribut ke sumber daya tersebut, dan gunakan skrip pembantu sinyal cfn untuk memberi sinyal ketika proses pembuatan instance telah berhasil diselesaikan.
Untuk informasi selengkapnya, lihat CreationPolicyatribut atau Menyebarkan aplikasi di Amazon EC2.
Menggunakan AWS::CloudFormation::WaitConditionHandle
sumber daya dan CreationPolicyatribut atribut, Anda dapat melakukan hal berikut:
-
Koordinasikan pembuatan sumber daya tumpukan dengan tindakan konfigurasi lain yang berada di luar pembuatan tumpukan
-
Melacak status proses konfigurasi
Misalnya, Anda dapat memulai pembuatan sumber daya lain setelah konfigurasi aplikasi selesai sebagian, atau Anda dapat mengirim sinyal selama proses instalasi dan konfigurasi untuk melacak kemajuannya.
Menggunakan penanganan kondisi tunggu
catatan
Jika Anda menggunakan fitur VPCtitik akhir, sumber daya dalam VPC yang merespons kondisi tunggu harus memiliki akses ke AWS CloudFormation-ember khusus Amazon Simple Storage Service (Amazon S3). Sumber daya harus mengirimkan respons kondisi tunggu ke Amazon URL S3 yang telah ditetapkan sebelumnya. Jika mereka tidak dapat mengirim tanggapan ke Amazon S3, AWS CloudFormation tidak akan menerima respons dan operasi tumpukan gagal. Untuk informasi selengkapnya, lihat Akses CloudFormation menggunakan endpoint antarmuka ()AWS PrivateLink dan Contoh kebijakan bucket untuk VPC titik akhir Amazon S3.
Anda dapat menggunakan kondisi tunggu dan pegangan kondisi tunggu untuk membuatnya AWS CloudFormation jeda pembuatan tumpukan dan tunggu sinyal sebelum terus membuat tumpukan. Misalnya, Anda mungkin ingin mengunduh dan mengonfigurasi aplikasi di EC2 instans Amazon sebelum mempertimbangkan pembuatan EC2 instans Amazon itu selesai.
Daftar berikut memberikan ringkasan tentang cara kerja kondisi tunggu dengan penanganan kondisi tunggu:
-
AWS CloudFormation menciptakan kondisi tunggu seperti sumber daya lainnya. Saat AWS CloudFormation membuat kondisi tunggu, ia melaporkan status kondisi tunggu sebagai CREATE _IN_ PROGRESS dan menunggu hingga menerima jumlah sinyal keberhasilan yang diperlukan atau periode batas waktu kondisi tunggu telah kedaluwarsa. Jika AWS CloudFormation menerima jumlah sinyal keberhasilan yang diperlukan sebelum periode waktu habis berakhir, ia terus membuat tumpukan; jika tidak, ia menetapkan status kondisi tunggu ke
CREATE_FAILED
dan memutar tumpukan kembali. -
Timeout
Properti menentukan berapa lama AWS CloudFormation menunggu jumlah sinyal sukses yang diperlukan.Timeout
adalah properti terikat minimum, yang berarti batas waktu terjadi tidak lebih cepat dari waktu yang Anda tentukan, tetapi dapat terjadi segera setelahnya. Waktu maksimum yang dapat Anda tentukan adalah 43.200 detik (12 jam). -
Biasanya, Anda ingin kondisi tunggu dimulai segera setelah pembuatan sumber daya tertentu, seperti EC2 instans Amazon, instans RDS DB, atau grup Auto Scaling. Anda melakukan ini dengan menambahkan DependsOnatribut ke kondisi tunggu. Saat Anda menambahkan
DependsOn
atribut ke kondisi tunggu, Anda menentukan bahwa kondisi tunggu dibuat hanya setelah pembuatan sumber daya tertentu selesai. Ketika kondisi tunggu dibuat, AWS CloudFormation memulai periode batas waktu dan menunggu sinyal sukses. -
Anda juga dapat menggunakan
DependsOn
atribut pada sumber daya lain. Misalnya, Anda mungkin ingin instans Amazon RDS DB dibuat dan database dikonfigurasi pada instans DB tersebut terlebih dahulu sebelum membuat EC2 instance yang menggunakan database tersebut. Dalam hal ini, Anda membuat kondisi tunggu yang memilikiDependsOn
atribut yang menentukan instans DB, dan Anda membuat sumber daya EC2 instance yang memilikiDependsOn
atribut yang menentukan kondisi tunggu. Ini akan memastikan bahwa EC2 instance hanya akan dibuat langsung setelah instans DB dan kondisi tunggu selesai. -
AWS CloudFormation harus menerima sejumlah sinyal keberhasilan tertentu untuk kondisi tunggu sebelum mengatur status kondisi tunggu itu untuk
CREATE_COMPLETE
melanjutkan pembuatan tumpukan.Count
Properti kondisi tunggu menentukan jumlah sinyal keberhasilan. Jika tidak ada yang diatur, default-nya adalah 1. -
Kondisi tunggu memerlukan pegangan kondisi tunggu untuk mengatur presigned URL yang digunakan sebagai mekanisme pensinyalan. Presigned URL memungkinkan Anda mengirim sinyal tanpa harus memasok AWS kredensil. Anda menggunakan presigned URL untuk menandakan keberhasilan atau kegagalan, yang dikemas dalam sebuah pernyataan. JSON Untuk format JSON pernyataan itu, lihatJSONFormat sinyal kondisi tunggu.
-
Jika kondisi tunggu menerima jumlah sinyal keberhasilan yang diperlukan (sebagaimana didefinisikan dalam properti Count) sebelum periode batas waktu berakhir, AWS CloudFormation menandai kondisi tunggu sebagai
CREATE_COMPLETE
dan terus membuat tumpukan. Jika tidak, AWS CloudFormation gagal dalam kondisi tunggu dan memutar tumpukan kembali (misalnya, jika periode batas waktu berakhir tanpa sinyal keberhasilan yang diperlukan atau jika sinyal kegagalan diterima).
Untuk menggunakan kondisi tunggu di tumpukan:
-
Mendeklarasikan
AWS::CloudFormation::WaitConditionHandle
sumber daya dalam template stack. Pegangan kondisi tunggu tidak memiliki properti; Namun, referensi keWaitConditionHandle
sumber daya menyelesaikan presigned URL yang dapat Anda gunakan untuk memberi sinyal keberhasilan atau kegagalan pada.WaitCondition
Sebagai contoh:"myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
-
Mendeklarasikan
AWS::CloudFormation::WaitCondition
sumber daya dalam template stack.WaitCondition
Sumber daya memiliki dua properti yang diperlukan:Handle
adalah referensi ke yangWaitConditionHandle
dideklarasikan dalam templat danTimeout
merupakan angka detik untuk AWS CloudFormation untuk menunggu. Anda dapat secara opsional mengaturCount
properti, yang menentukan jumlah sinyal keberhasilan yang harus diterima oleh kondisi tunggu sebelumnya AWS CloudFormation dapat melanjutkan membuat tumpukan.Untuk mengontrol kapan kondisi tunggu dipicu, Anda menetapkan
DependsOn
atribut pada kondisi tunggu. SebuahDependsOn
klausa mengaitkan sumber daya dengan kondisi tunggu. Setelah AWS CloudFormation membuatDependsOn
sumber daya, itu memblokir pembuatan sumber daya tumpukan lebih lanjut sampai salah satu peristiwa berikut terjadi: a) periode batas waktu berakhir b) Jumlah sinyal keberhasilan yang diperlukan diterima c) Sinyal kegagalan diterima.Berikut adalah contoh kondisi tunggu yang dimulai setelah keberhasilan pembuatan
Ec2Instance
sumber daya, menggunakan sumber daya sebagaiWaitConditionHandle
, memiliki batas waktu 4500 detik, dan memiliki defaultCount
1 (karena tidak adaCount
properti yang ditentukan):myWaitHandle
"myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
-
Dapatkan presigned URL untuk digunakan untuk pensinyalan.
Dalam template, presigned URL dapat diambil dengan meneruskan nama logis
AWS::CloudFormation::WaitConditionHandle
sumber daya ke fungsi intrinsik Ref. Misalnya, Anda dapat menggunakanUserData
properti padaAWS::EC2::Instance
sumber daya untuk meneruskan EC2 instans yang telah ditetapkan sebelumnya URL ke Amazon sehingga skrip atau aplikasi yang berjalan pada instans tersebut dapat menandakan keberhasilan atau kegagalan AWS CloudFormation:"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }
Catatan: Di AWS Management Console atau AWS CloudFormation alat baris perintah, presigned URL ditampilkan sebagai ID fisik dari sumber daya penanganan kondisi tunggu.
-
Pilih metode untuk mendeteksi ketika tumpukan memasuki kondisi tunggu.
Jika Anda membuat tumpukan dengan notifikasi diaktifkan, AWS CloudFormation menerbitkan pemberitahuan untuk setiap peristiwa tumpukan ke topik yang ditentukan. Jika Anda atau aplikasi berlangganan topik tersebut, Anda dapat memantau notifikasi untuk acara pembuatan penanganan kondisi tunggu dan mengambil presigned URL dari pesan notifikasi.
Anda juga dapat memantau peristiwa tumpukan menggunakan AWS Management Console, AWS CloudFormation alat baris perintah, atau AWS CloudFormation API.
-
Gunakan presigned URL untuk menandakan keberhasilan atau kegagalan.
Untuk mengirim sinyal, Anda mengirim pesan HTTP permintaan menggunakan presignedURL. Metode permintaan harus
PUT
danContent-Type
header harus berupa string kosong atau dihilangkan. Pesan permintaan harus berupa JSON struktur formulir yang ditentukan dalamJSONFormat sinyal kondisi tunggu.Anda perlu mengirim jumlah sinyal keberhasilan yang ditentukan oleh
Count
properti agar AWS CloudFormation untuk melanjutkan pembuatan tumpukan. Jika Anda memilikiCount
yang lebih besar dari 1,UniqueId
nilai untuk setiap sinyal harus unik di semua sinyal yang dikirim ke kondisi tunggu tertentu.UniqueId
Ini adalah string alfanumerik arbitrer.curl
Perintah adalah salah satu cara untuk mengirim sinyal. Contoh berikut menunjukkan bariscurl
perintah yang menandakan keberhasilan untuk kondisi menunggu.$
curl -T /tmp/a \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3A
aws-region
%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"dimana file /tmp/a berisi struktur berikut: JSON
{ "Status" : "SUCCESS", "Reason" : "Configuration Complete", "UniqueId" : "ID1234", "Data" : "Application has completed configuration." }
Contoh ini menunjukkan baris
curl
perintah yang mengirimkan sinyal sukses yang sama kecuali mengirimkan JSON struktur sebagai parameter pada baris perintah.$
curl -X PUT \ -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS","Reason" : "Configuration Complete","UniqueId" : "ID1234","Data" : "Application has completed configuration."}' \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3A
aws-region
%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
JSONFormat sinyal kondisi tunggu
Saat Anda memberi sinyal kondisi tunggu, Anda harus menggunakan JSON format berikut:
{ "Status" : "StatusValue", "UniqueId" : "Some UniqueId", "Data" : "Some Data", "Reason" : "Some Reason" }
Di mana:
StatusValueharus menjadi salah satu dari nilai-nilai berikut:
-
SUCCESSmenunjukkan sinyal sukses.
-
FAILUREmenunjukkan sinyal kegagalan dan memicu kondisi tunggu yang gagal dan rollback tumpukan.
UniqueId
mengidentifikasi sinyal untuk AWS CloudFormation. Jika Count
properti kondisi tunggu lebih besar dari 1, UniqueId
nilainya harus unik di semua sinyal yang dikirim untuk kondisi tunggu tertentu; jika tidak, AWS CloudFormation akan mempertimbangkan sinyal transmisi ulang dari sinyal yang dikirim sebelumnya dengan yang samaUniqueId
, dan itu akan mengabaikan sinyal.
Data
adalah informasi apa pun yang ingin Anda kirim kembali dengan sinyal. Data
Nilai dapat diakses dengan memanggil GetAttfungsi Fn:: dalam template. Misalnya, jika Anda membuat nilai output berikut untuk kondisi tunggumywaitcondition
, Anda dapat menggunakan aws cloudformation describe-stacks
perintah, DescribeStacks
APIoperasi, atau tab Output dari AWS CloudFormation konsol untuk melihat yang Data
dikirim oleh sinyal valid yang dikirim ke AWS CloudFormation:
"WaitConditionData" : { "Value" : { "Fn::GetAtt" : [ "mywaitcondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition" },
GetAttFungsi Fn:: mengembalikan UniqueId
dan Data
sebagai pasangan nama/nilai dalam struktur. JSON Berikut ini adalah contoh Data
atribut yang dikembalikan oleh nilai WaitConditionData
output yang didefinisikan di atas:
{"Signal1":"Application has completed configuration."}
Alasannya adalah string tanpa batasan lain pada kontennya selain JSON kepatuhan.