

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
<a name="using-cfn-waitcondition"></a>

Topik ini menjelaskan cara membuat kondisi tunggu dalam template untuk mengoordinasikan pembuatan sumber daya tumpukan atau melacak kemajuan 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. 

Saat CloudFormation membuat tumpukan yang menyertakan kondisi tunggu:
+ Ini menciptakan kondisi tunggu seperti sumber daya lainnya dan menetapkan status kondisi tunggu ke`CREATE_IN_PROGRESS`.
+ CloudFormation menunggu sampai menerima jumlah sinyal keberhasilan yang diperlukan atau periode batas waktu tunggu telah kedaluwarsa. 
+ Jika menerima jumlah sinyal keberhasilan yang diperlukan sebelum periode batas waktu berakhir:
  + Status kondisi tunggu berubah menjadi `CREATE_COMPLETE`
  + Pembuatan tumpukan berlanjut
+ Jika batas waktu berakhir atau sinyal kegagalan diterima:
  + Status kondisi tunggu berubah menjadi `CREATE_FAILED`
  + Tumpukan gulungan kembali

**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 lebih lanjut, lihat [Atribut CreationPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-creationpolicy.html).

**catatan**  
Jika Anda menggunakan AWS PrivateLink, sumber daya di VPC yang merespons kondisi tunggu harus memiliki akses ke bucket Amazon Simple Storage Service (Amazon S3) CloudFormation 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 CloudFormation akan menerima respons dan operasi tumpukan gagal. Untuk informasi selengkapnya, lihat [Akses CloudFormation menggunakan endpoint antarmuka ()AWS PrivateLink](vpc-interface-endpoints.md) dan [Mengontrol akses dari titik akhir VPC dengan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html) kebijakan bucket.

**Topics**
+ [

## Membuat kondisi tunggu di template Anda
](#creating-wait-condition)
+ [

## Tunggu sintaks sinyal kondisi
](#wait-condition-signal-syntax)
+ [

## Mengakses data sinyal
](#wait-condition-access-signal-data)

## Membuat kondisi tunggu di template Anda
<a name="creating-wait-condition"></a>

**1. Tunggu kondisi pegangan**  
Anda mulai dengan mendefinisikan [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html)sumber daya dalam template stack. Sumber daya ini menghasilkan URL presigned yang diperlukan untuk mengirim sinyal. Ini memungkinkan Anda untuk mengirim sinyal tanpa harus memberikan AWS kredensi Anda. Contoh: 

```
Resources:
  MyWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

**2. Kondisi menunggu**  
Selanjutnya, Anda menentukan [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html)sumber daya dalam template stack. Struktur dasar dari `AWS::CloudFormation::WaitCondition` terlihat seperti ini: 

```
  MyWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    Properties:
      Handle: String
      Timeout: String
      Count: Integer
```

Sumber `AWS::CloudFormation::WaitCondition` daya memiliki dua properti yang diperlukan dan satu properti opsional.
+ `Handle`(wajib) - Referensi ke yang `WaitConditionHandle` dideklarasikan dalam template.
+ `Timeout`(wajib) — Jumlah detik CloudFormation untuk menunggu jumlah sinyal yang diperlukan untuk diterima. `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).
+ `Count`(opsional) — Jumlah sinyal sukses yang CloudFormation harus diterima sebelum menetapkan status kondisi tunggu itu `CREATE_COMPLETE` dan melanjutkan pembuatan tumpukan. Jika tidak ditentukan, nilai defaultnya adalah 1.

Biasanya, Anda ingin kondisi menunggu dimulai segera setelah pembuatan sumber daya tertentu. Anda melakukan ini dengan menambahkan `DependsOn` atribut ke kondisi tunggu. Saat Anda menambahkan `DependsOn` atribut ke kondisi tunggu, CloudFormation buat sumber daya di `DependsOn` atribut terlebih dahulu, lalu buat kondisi tunggu. Untuk informasi lebih lanjut, lihat [Atribut DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-dependson.html).

Contoh berikut menunjukkan kondisi tunggu yang: 
+ Dimulai setelah penciptaan `MyEC2Instance` sumber daya yang sukses
+ Menggunakan `MyWaitHandle` sumber daya sebagai `WaitConditionHandle`
+ Memiliki batas waktu 4500 detik
+ Memiliki default `Count` 1 (karena tidak ada `Count` properti yang ditentukan)

```
  MyWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    DependsOn: MyEC2Instance
    Properties:
      Handle: !Ref MyWaitHandle
      Timeout: '4500'
```

**3. Mengirim sinyal**  
Untuk memberi sinyal keberhasilan atau kegagalan CloudFormation, Anda biasanya menjalankan beberapa kode atau skrip. Misalnya, aplikasi yang berjalan pada instans EC2 mungkin melakukan beberapa tugas konfigurasi tambahan dan kemudian mengirim sinyal CloudFormation untuk menunjukkan penyelesaian.

Sinyal harus dikirim ke URL yang telah ditentukan sebelumnya yang dihasilkan oleh pegangan kondisi tunggu. Anda menggunakan URL yang telah ditentukan sebelumnya untuk memberi sinyal keberhasilan atau kegagalan.

**Untuk mengirim sinyal**

1. Untuk mengambil URL presigned dalam template, gunakan fungsi `Ref` intrinsik dengan nama logis dari handle kondisi tunggu. 

   Seperti yang ditunjukkan pada contoh berikut, template Anda dapat mendeklarasikan instans Amazon EC2 dan meneruskan URL yang telah ditetapkan sebelumnya ke instans EC2 menggunakan properti Amazon EC2. `UserData` Hal ini memungkinkan skrip atau aplikasi yang berjalan pada instance tersebut untuk menandakan keberhasilan atau kegagalan. CloudFormation

   ```
     MyEC2Instance:
       Type: AWS::EC2::Instance
       Properties:
       InstanceType: t2.micro  # Example instance type
       ImageId: ami-055e3d4f0bbeb5878  # Change this as needed (Amazon Linux 2023 in us-west-2)
       UserData:
         Fn::Base64: 
           Fn::Join: 
             - ""
             - - "SignalURL="
               - { "Ref": "MyWaitHandle" }
   ```

   Ini menghasilkan `UserData` output yang mirip dengan:

   ```
   SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....
   ```

   Catatan: Dalam Konsol Manajemen AWS dan alat baris perintah, URL presigned ditampilkan sebagai ID fisik dari sumber daya penanganan kondisi tunggu.

1. (Opsional) Untuk mendeteksi kapan tumpukan memasuki kondisi tunggu, Anda dapat menggunakan salah satu metode berikut:
   + Jika Anda membuat tumpukan dengan pemberitahuan yang diaktifkan, CloudFormation mengeluarkan pemberitahuan untuk setiap peristiwa tumpukan untuk topik tertentu. 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 Konsol Manajemen AWS, the AWS CLI, atau SDK.

1. 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 [Tunggu sintaks sinyal kondisi](#wait-condition-signal-syntax).

   Anda harus mengirim jumlah sinyal sukses yang ditentukan oleh `Count` properti agar dapat 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. `UniqueId`Ini adalah string alfanumerik arbitrer.

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

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

   di mana file *`/tmp/a`* berisi 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://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
   ```

## Tunggu sintaks sinyal kondisi
<a name="wait-condition-signal-syntax"></a>

Saat Anda mengirim sinyal ke URL yang dihasilkan oleh pegangan kondisi tunggu, Anda harus menggunakan format JSON berikut:

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

### Sifat-sifat
<a name="wait-condition-signal-properties"></a>

`Status`Bidang harus menjadi salah satu dari nilai berikut:
+ `SUCCESS`
+ `FAILURE`

`UniqueId`Bidang mengidentifikasi sinyal ke 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, CloudFormation akan mempertimbangkan sinyal transmisi ulang dari sinyal yang dikirim sebelumnya dengan yang sama `UniqueId` dan mengabaikannya.

`Data`Bidang dapat berisi informasi apa pun yang ingin Anda kirim kembali dengan sinyal. Anda dapat mengakses `Data` nilai dengan menggunakan GetAtt fungsi [Fn::](resources-section-structure.md#resource-properties-getatt) dalam template.

`Reason`Bidang ini adalah string tanpa batasan lain pada kontennya selain kepatuhan JSON.

## Mengakses data sinyal
<a name="wait-condition-access-signal-data"></a>

Untuk mengakses data yang dikirim oleh sinyal yang valid, Anda dapat membuat nilai output untuk kondisi tunggu di CloudFormation template Anda. Contoh:

```
Outputs:
  WaitConditionData:
    Description: The data passed back as part of signalling the WaitCondition
    Value: !GetAtt MyWaitCondition.Data
```

Anda kemudian dapat melihat data ini menggunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html)perintah, atau tab **Output** CloudFormation konsol.

`Fn::GetAtt`Fungsi mengembalikan `UniqueId` dan `Data` sebagai name/value pasangan dalam struktur JSON. Contoh:

```
{"Signal1":"Application has completed configuration."}
```