Membuat kondisi menunggu dalam templat - AWS CloudFormation

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

Membuat kondisi menunggu dalam templat

penting

Untuk sumber daya Amazon EC2 dan Auto Scaling, sebaiknya gunakan atribut alih-alih CreationPolicy 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 Menerapkan aplikasi di Amazon EC2 dengan AWS CloudFormation.

Menggunakan AWS::CloudFormation::WaitConditionHandlesumber 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 titik akhir VPC, sumber daya di VPC yang merespons kondisi tunggu harus memiliki akses ke bucket Amazon Simple Storage Service ( AWS CloudFormation Amazon S3) khusus. Sumber daya harus mengirimkan respons kondisi tunggu ke URL Amazon S3 yang telah ditetapkan sebelumnya. Jika mereka tidak dapat mengirim tanggapan ke Amazon S3, tidak AWS CloudFormation akan menerima respons dan operasi tumpukan gagal. Untuk informasi lebih lanjut, lihat Akses CloudFormation menggunakan endpoint antarmuka ()AWS PrivateLink dan Contoh kebijakan bucket untuk titik akhir VPC untuk Amazon S3.

Anda dapat menggunakan kondisi tunggu dan pegangan kondisi tunggu untuk membuat AWS CloudFormation jeda pembuatan tumpukan dan menunggu sinyal sebelum terus membuat tumpukan. Misalnya, Anda mungkin ingin mengunduh dan mengonfigurasi aplikasi pada instans Amazon EC2 sebelum mempertimbangkan pembuatan instans Amazon EC2 tersebut 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 waktu habis kondisi tunggu ini telah berakhir. 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.

  • TimeoutProperti menentukan berapa lama AWS CloudFormation menunggu jumlah sinyal keberhasilan yang diperlukan. Timeoutadalah 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 untuk segera mulai setelah pembuatan sumber daya tertentu, seperti instans Amazon EC2, 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 mulailah periode batas waktu dan tunggu 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 instans EC2 yang menggunakan database tersebut. Dalam hal ini, Anda membuat kondisi tunggu yang memiliki DependsOn atribut yang menentukan instans DB, dan Anda membuat sumber daya instans EC2 yang memiliki DependsOn atribut yang menentukan kondisi tunggu. Hal ini akan memastikan bahwa instans EC2 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. CountProperti kondisi tunggu menentukan jumlah sinyal keberhasilan. Jika tidak ada yang diatur, default-nya adalah 1.

  • Kondisi tunggu memerlukan penanganan kondisi tunggu untuk mengatur URL pra-ditandatangani yang digunakan sebagai mekanisme sinyal. URL presigned memungkinkan Anda mengirim sinyal tanpa harus memberikan AWS kredensyal Anda. Anda menggunakan URL presigned untuk sinyal keberhasilan atau kegagalan, yang dienkapsulasi dalam pernyataan JSON. Untuk format pernyataan JSON, lihat Sinyal kondisi tunggu format JSON.

  • Jika kondisi tunggu menerima jumlah sinyal sukses yang diperlukan (seperti yang didefinisikan dalam properti Count) sebelum periode batas waktu berakhir, AWS CloudFormation tandai kondisi tunggu sebagai CREATE_COMPLETE dan terus membuat tumpukan. Jika tidak, AWS CloudFormation gagal 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:
  1. Mendeklarasikan AWS::CloudFormation::WaitConditionHandle sumber daya dalam template stack. Pegangan kondisi tunggu tidak memiliki properti; Namun, referensi ke WaitConditionHandle sumber daya menyelesaikan URL yang telah ditentukan sebelumnya yang dapat Anda gunakan untuk memberi sinyal keberhasilan atau kegagalan. WaitCondition Sebagai contoh:

    "myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
  2. Mendeklarasikan AWS::CloudFormation::WaitCondition sumber daya dalam template stack. WaitConditionSumber daya memiliki dua properti yang diperlukan: Handle adalah referensi ke yang WaitConditionHandle dideklarasikan dalam template dan Timeout merupakan angka detik AWS CloudFormation untuk menunggu. Anda dapat mengatur Count properti secara opsional, yang menentukan jumlah sinyal keberhasilan yang harus diterima kondisi tunggu sebelum AWS CloudFormation dapat melanjutkan pembuatan tumpukan.

    Untuk mengontrol kapan kondisi tunggu dipicu, Anda menetapkan DependsOn atribut pada kondisi tunggu. DependsOnKlausa mengaitkan sumber daya dengan kondisi tunggu. Setelah AWS CloudFormation membuat DependsOn sumber daya, ia 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 default Count 1 (karena tidak ada Count properti yang ditentukan): myWaitHandle

    "myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
  3. Dapatkan URL yang telah ditandatangani untuk mengirim sinyal.

    Dalam template, URL presigned dapat diambil dengan meneruskan nama logis AWS::CloudFormation::WaitConditionHandle sumber daya ke fungsi intrinsik Ref. Misalnya, Anda dapat menggunakan UserData properti pada AWS::EC2::Instance sumber daya untuk meneruskan URL yang telah ditetapkan sebelumnya ke instans Amazon EC2 sehingga skrip atau aplikasi yang berjalan pada instans tersebut dapat menandakan keberhasilan atau kegagalan untuk: AWS CloudFormation

    "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }

    Catatan: Di AWS Management Console atau alat baris AWS CloudFormation perintah, URL presigned ditampilkan sebagai ID fisik sumber daya penanganan kondisi tunggu.

  4. Pilih metode untuk mendeteksi ketika tumpukan memasuki kondisi tunggu.

    Jika Anda membuat tumpukan dengan notifikasi diaktifkan, AWS CloudFormation menerbitkan notifikasi untuk setiap peristiwa tumpukan ke topik yang ditentukan. Jika Anda atau aplikasi Anda berlangganan topik itu, Anda dapat memantau pemberitahuan untuk peristiwa pembuatan penanganan kondisi tunggu dan mengambil URL yang telah ditandatangani dari pesan pemberitahuan.

    Anda juga dapat memantau peristiwa tumpukan menggunakan AWS Management Console, alat baris AWS CloudFormation perintah, atau AWS CloudFormation API.

  5. Gunakan URL yang telah ditandatangani untuk menandakan keberhasilan atau kegagalan.

    Untuk mengirim sinyal, Anda mengirim pesan permintaan HTTP menggunakan URL yang telah ditandatangani. Metode permintaan harus PUT dan Content-Type header harus berupa string kosong atau dihilangkan. Pesan permintaan harus berupa struktur formulir JSON yang ditentukan dalam Sinyal kondisi tunggu format JSON.

    Anda perlu mengirim jumlah sinyal sukses yang ditentukan oleh Count properti agar dapat AWS CloudFormation melanjutkan pembuatan tumpukan. Jika Anda memiliki Count yang lebih besar dari 1, UniqueId nilai untuk setiap sinyal harus unik di semua sinyal yang dikirim ke kondisi tunggu tertentu. UniqueIdIni adalah string alfanumerik arbitrer.

    curlPerintah adalah salah satu cara untuk mengirim sinyal. Contoh berikut menunjukkan baris curl perintah yang menandakan keberhasilan untuk kondisi menunggu.

    $ curl -T /tmp/a \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"

    Tempat file /tmp/a mengandung struktur JSON berikut:

    { "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 struktur JSON 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%3Aus-east-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"

Sinyal kondisi tunggu format JSON

Ketika Anda memberi sinyal kondisi tunggu, Anda harus menggunakan format JSON berikut:

{ "Status" : "StatusValue", "UniqueId" : "Some UniqueId", "Data" : "Some Data", "Reason" : "Some Reason" }

Di mana:

StatusValueharus menjadi salah satu dari nilai-nilai berikut:

  • SUCCESS menunjukkan sinyal sukses.

  • FAILURE menunjukkan sinyal kegagalan dan memicu kondisi tunggu yang gagal dan rollback tumpukan.

UniqueIdmengidentifikasi sinyal ke 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.

Dataadalah informasi apa pun yang ingin Anda kirim kembali dengan sinyal. DataNilai dapat diakses dengan memanggil GetAttfungsi Fn:: dalam template. Misalnya, jika Anda membuat nilai keluaran berikut untuk kondisi tunggumywaitcondition, Anda dapat menggunakan aws cloudformation describe-stacks perintah, operasi DescribeStacksAPI, atau tab Output AWS CloudFormation konsol untuk melihat sinyal yang Data dikirim oleh 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."}

Alasan adalah string tanpa batasan lain pada isinya selain kepatuhan JSON.