Buat kondisi tunggu di CloudFormation template - AWS CloudFormation

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::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 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.

  • TimeoutProperti menentukan berapa lama AWS CloudFormation menunggu jumlah sinyal sukses 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 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 memiliki DependsOn atribut yang menentukan instans DB, dan Anda membuat sumber daya EC2 instance yang memiliki DependsOn 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. CountProperti 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:
  1. Mendeklarasikan AWS::CloudFormation::WaitConditionHandle sumber daya dalam template stack. Pegangan kondisi tunggu tidak memiliki properti; Namun, referensi ke WaitConditionHandle 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" : { } }
  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 templat dan Timeout merupakan angka detik untuk AWS CloudFormation untuk menunggu. Anda dapat secara opsional mengatur Count 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. Sebuah DependsOn klausa mengaitkan sumber daya dengan kondisi tunggu. Setelah AWS CloudFormation membuat DependsOn 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 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 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 menggunakan UserData properti pada AWS::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.

  4. 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.

  5. Gunakan presigned URL untuk menandakan keberhasilan atau kegagalan.

    Untuk mengirim sinyal, Anda mengirim pesan HTTP permintaan menggunakan presignedURL. Metode permintaan harus PUT dan Content-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 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%3Aaws-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%3Aaws-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.

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

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 output berikut untuk kondisi tunggumywaitcondition, Anda dapat menggunakan aws cloudformation describe-stacks perintah, DescribeStacksAPIoperasi, 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.