

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

# Mendeteksi perubahan konfigurasi yang tidak terkelola pada tumpukan dan sumber daya dengan deteksi drift
<a name="using-cfn-stack-drift"></a>

Bahkan saat Anda mengelola sumber daya Anda CloudFormation, pengguna dapat mengubah sumber daya tersebut di luar CloudFormation. Pengguna dapat mengedit sumber daya secara langsung dengan menggunakan layanan dasar yang membuat sumber daya. Misalnya, Anda dapat menggunakan konsol Amazon EC2 untuk memperbarui instance server yang dibuat sebagai bagian dari tumpukan. CloudFormation Beberapa perubahan mungkin tidak disengaja, dan beberapa mungkin dibuat dengan sengaja untuk menanggapi peristiwa operasional yang sensitif terhadap waktu. Terlepas dari itu, perubahan yang dilakukan di luar CloudFormation dapat mempersulit pembaruan tumpukan atau operasi penghapusan. Anda dapat menggunakan deteksi drift untuk mengidentifikasi sumber daya tumpukan yang telah dilakukan perubahan konfigurasi di luar CloudFormation manajemen. Anda kemudian dapat mengambil tindakan korektif sehingga sumber daya tumpukan Anda kembali sinkron dengan definisinya di templat tumpukan, seperti memperbarui sumber daya menyimpang secara langsung sehingga mereka setuju dengan definisi templatnya. Menyelesaikan penyimpangan membantu memastikan konsistensi konfigurasi dan operasi tumpukan yang sukses.

**Topics**
+ [Apa yang dimaksud dengan penyimpangan?](#what-is-drift)
+ [Kode status deteksi penyimpangan](#drift-status-codes)
+ [Pertimbangan saat mendeteksi penyimpangan](#drift-considerations)
+ [Mendeteksi penyimpangan di seluruh tumpukan CloudFormation](detect-drift-stack.md)
+ [Mendeteksi penyimpangan di sumber daya tumpukan individu](detect-drift-resource.md)
+ [Mengatasi penyimpangan dengan operasi impor](resource-import-resolve-drift.md)

## Apa yang dimaksud dengan penyimpangan?
<a name="what-is-drift"></a>

Deteksi penyimpangan memungkinkan Anda mendeteksi apakah konfigurasi sebenarnya dari suatu tumpukan berbeda, atau telah *menyimpang*, dari konfigurasi yang diharapkan. Gunakan CloudFormation untuk mendeteksi penyimpangan pada seluruh tumpukan, atau pada sumber daya individu dalam tumpukan. Sumber daya dianggap telah menyimpang jika salah satu nilai properti sebenarnya berbeda dari nilai properti yang diharapkan. Ini termasuk jika properti atau sumber daya telah dihapus. Tumpukan dianggap telah menyimpang jika satu atau lebih dari sumber dayanya menyimpang.

Untuk menentukan apakah sumber daya telah hanyut, CloudFormation tentukan nilai properti sumber daya yang diharapkan, seperti yang didefinisikan dalam template tumpukan dan nilai apa pun yang ditentukan sebagai parameter templat. CloudFormation kemudian membandingkan nilai-nilai yang diharapkan dengan nilai aktual dari properti sumber daya seperti yang saat ini ada di tumpukan. Sebuah sumber daya dianggap telah menyimpang jika satu atau lebih dari propertinya telah dihapus, atau nilainya diubah.

CloudFormation menghasilkan informasi rinci tentang setiap sumber daya di tumpukan yang telah melayang.

CloudFormation mendeteksi penyimpangan pada AWS sumber daya yang mendukung deteksi drift. Sumber daya yang tidak mendukung deteksi penyimpangan diberi status penyimpangan NOT\$1CHECKED. Untuk daftar AWS sumber daya yang mendukung deteksi drift, lihat[Dukungan jenis sumber daya](resource-import-supported-resources.md).

Selain itu, CloudFormation mendukung deteksi drift pada tipe sumber daya pribadi yang *dapat disediakan*; yaitu, yang tipe penyediaannya adalah salah satu atau. `FULLY_MUTABLE` `IMMUTABLE` Untuk melakukan deteksi penyimpangan pada sumber daya dari jenis sumber daya pribadi, versi default dari jenis sumber daya yang telah Anda daftarkan di akun Anda harus tersedia. Untuk informasi selengkapnya tentang jenis penyediaan sumber daya, lihat `ProvisioningType` parameter [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html)tindakan di *Referensi AWS CloudFormation API* dan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html)perintah di *Referensi AWS CLI Perintah*. Untuk informasi lebih lanjut tentang sumber daya pribadi, lihat[Mengelola ekstensi dengan CloudFormation registri](registry.md).

Anda dapat melakukan deteksi penyimpangan pada tumpukan dengan status berikut: `CREATE_COMPLETE`, `UPDATE_COMPLETE`, `UPDATE_ROLLBACK_COMPLETE`, dan `UPDATE_ROLLBACK_FAILED`.

Saat mendeteksi penyimpangan pada tumpukan, CloudFormation tidak mendeteksi penyimpangan pada tumpukan bersarang yang termasuk dalam tumpukan itu. Untuk informasi selengkapnya, lihat [Pisahkan template menjadi potongan-potongan yang dapat digunakan kembali menggunakan tumpukan bersarang](using-cfn-nested-stacks.md). Sebaliknya, Anda dapat memulai operasi deteksi penyimpangan langsung pada tumpukan nested.

**catatan**  
CloudFormation hanya menentukan penyimpangan untuk nilai properti yang ditetapkan secara eksplisit, baik melalui template tumpukan atau dengan menentukan parameter template. Ini tidak termasuk nilai default untuk properti sumber daya. Untuk CloudFormation melacak properti sumber daya untuk tujuan menentukan penyimpangan, tetapkan nilai properti secara eksplisit, bahkan jika Anda menyetelnya ke nilai default.

## Kode status deteksi penyimpangan
<a name="drift-status-codes"></a>

Tabel di bagian ini menjelaskan berbagai jenis status yang digunakan dengan deteksi penyimpangan:
+ **Status operasi deteksi penyimpangan** menjelaskan status operasi penyimpangan saat ini.
+ **Status melayang** 

  Untuk set tumpukan, ini menjelaskan status penyimpangan set tumpukan secara keseluruhan, berdasarkan status penyimpangan dari instans tumpukan yang ada di set tersebut.

  Untuk instans tumpukan, ini menjelaskan status penyimpangan dari instans tumpukan, berdasarkan status penyimpangan tumpukan terkait.

  Untuk tumpukan, ini menjelaskan status penyimpangan tumpukan secara keseluruhan, berdasarkan status penyimpangan dari sumber dayanya.
+ **Status penyimpangan sumber daya** menjelaskan status penyimpangan dari sumber daya individual.

Tabel berikut mencantumkan kode status yang ditetapkan untuk CloudFormation operasi deteksi drift tumpukan.


| Status operasi deteksi penyimpangan | Deskripsi | 
| --- | --- | 
|  `DETECTION_COMPLETE`  |  Operasi deteksi penyimpangan tumpukan telah berhasil diselesaikan untuk semua sumber daya di tumpukan yang mendukung deteksi penyimpangan.  | 
|  `DETECTION_FAILED`  |  Operasi deteksi penyimpangan tumpukan gagal untuk setidaknya satu sumber daya dalam tumpukan. Hasil akan tersedia untuk sumber daya yang CloudFormation berhasil menyelesaikan deteksi drift.  | 
|  `DETECTION_IN_PROGRESS`  |  Operasi deteksi penyimpangan tumpukan saat ini sedang berlangsung.  | 

Tabel berikut mencantumkan kode status drift yang ditetapkan ke CloudFormation tumpukan.


| Status penyimpangan | Deskripsi | 
| --- | --- | 
|  `DRIFTED`  |  Untuk tumpukan: Tumpukan berbeda, atau telah *menyimpang*, dari konfigurasi templat yang diharapkan. Tumpukan dianggap telah menyimpang jika satu atau lebih dari sumber dayanya menyimpang. Untuk instans tumpukan: Sebuah instans tumpukan dianggap menyimpang jika tumpukan yang terkait dengannya telah melayang. Untuk set tumpukan: Satu set tumpukan dianggap menyimpang jika satu atau lebih instans tumpukan telah menyimpang.  | 
|  `NOT_CHECKED`  |  CloudFormation belum memeriksa apakah stack, stack set, atau stack instance berbeda dari konfigurasi template yang diharapkan.  | 
|  `IN_SYNC`  |  Konfigurasi saat ini dari setiap sumber daya yang didukung cocok dengan konfigurasi templat yang diharapkan. Sebuah tumpukan, set tumpukan, atau instans tumpukan tanpa sumber daya yang mendukung deteksi penyimpangan juga akan memiliki status IN\$1SYNC.  | 

Tabel berikut mencantumkan kode status drift yang ditetapkan ke CloudFormation sumber daya tumpukan.


| Status drift sumber daya | Deskripsi | 
| --- | --- | 
|  `DELETED`  |  Sumber daya berbeda dari konfigurasi templat yang diharapkan karena sumber daya telah dihapus.  | 
|  `MODIFIED`  |  Sumber daya berbeda dari konfigurasi templat yang diharapkan.  | 
|  `NOT_CHECKED`  |  CloudFormation belum memeriksa apakah sumber daya berbeda dari konfigurasi template yang diharapkan.  | 
|  `IN_SYNC`  |  Konfigurasi sumber daya saat ini cocok dengan konfigurasi templat yang diharapkan.  | 

Tabel berikut mencantumkan kode CloudFormation status tipe perbedaan yang ditetapkan ke properti sumber daya yang berbeda dari konfigurasi templat yang diharapkan.


| Jenis perbedaan properti | Deskripsi | 
| --- | --- | 
|  `ADD`  |  Nilai telah ditambahkan ke properti sumber daya yang merupakan tipe data array atau daftar.   | 
|  `REMOVE`  |  Properti telah dihapus dari konfigurasi sumber daya saat ini.  | 
|  `NOT_EQUAL`  |  Nilai properti saat ini berbeda dari nilai yang diharapkan seperti yang didefinisikan dalam templat tumpukan.  | 

## Pertimbangan saat mendeteksi penyimpangan
<a name="drift-considerations"></a>

Agar berhasil melakukan deteksi penyimpangan pada tumpukan, pengguna harus memiliki izin berikut:
+ Baca izin untuk setiap sumber daya yang mendukung deteksi penyimpangan termasuk dalam tumpukan. Misalnya, jika tumpukan mencakup sumber daya `AWS::EC2::Instance`, Anda harus memiliki izin `ec2:DescribeInstances` untuk melakukan deteksi penyimpangan pada tumpukan.
+ `cloudformation:DetectStackDrift`
+ `cloudformation:DetectStackResourceDrift`
+ `cloudformation:BatchDescribeTypeConfigurations`

Untuk informasi selengkapnya tentang menyetel izin di CloudFormation, lihat[Kontrol CloudFormation akses dengan AWS Identity and Access Management](control-access-with-iam.md).

Dalam kasus tepi tertentu, CloudFormation mungkin tidak selalu dapat mengembalikan hasil drift yang akurat. Anda harus menyadari kasus edge ini untuk benar menafsirkan hasil deteksi penyimpangan Anda.
+ Dalam kasus tertentu, objek yang terdapat dalam array properti akan dilaporkan sebagai penyimpangan, padahal sebenarnya objek tersebut adalah nilai default yang diberikan ke properti dari layanan dasar yang bertanggung jawab atas sumber daya.
+ Sumber daya tertentu memiliki hubungan lampiran dengan sumber daya terkait, sehingga sumber daya sebenarnya dapat melampirkan atau menghapus nilai properti untuk sumber daya lain, yang ditentukan dalam templat yang sama atau lainnya. Misalnya, sumber daya `AWS::EC2::SecurityGroupIngress` dan `AWS::EC2::SecurityGroupEgress` dapat digunakan untuk melampirkan dan menghapus nilai dari sumber daya `AWS::EC2::SecurityGroup`. Dalam kasus ini, CloudFormation analisis template tumpukan untuk lampiran sebelum melakukan perbandingan drift. Namun, tidak CloudFormation dapat melakukan analisis ini di seluruh tumpukan, sehingga mungkin tidak mengembalikan hasil penyimpangan yang akurat di mana sumber daya yang dilampirkan berada di tumpukan yang berbeda.

  Sumber daya yang mendukung deteksi penyimpangan dan memungkinkan atau memerlukan lampiran dari sumber daya lain meliputi:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)
+ CloudFormation tidak melakukan deteksi drift pada `KMSKeyId` properti sumber daya apa pun. Karena AWS KMS kunci dapat direferensikan oleh beberapa alias, tidak CloudFormation dapat menjamin hasil drift yang akurat secara konsisten untuk properti ini.
+ Ada properti sumber daya tertentu yang dapat Anda tentukan dalam template tumpukan Anda yang, pada dasarnya, tidak CloudFormation akan dapat dibandingkan dengan properti di sumber daya tumpukan yang dihasilkan. Oleh karena itu, properti-properti ini tidak dapat dimasukkan dalam hasil deteksi penyimpangan. Properti semacam itu terbagi dalam dua kategori besar:
  + Nilai properti yang CloudFormation tidak dapat memetakan kembali ke nilai properti sumber daya awal mereka di template tumpukan.

    Misalnya, CloudFormation tidak dapat memetakan kode sumber fungsi Lambda kembali ke jenis [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html)properti [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html)sumber daya, dan oleh karena itu tidak CloudFormation dapat menyertakannya dalam hasil deteksi drift. 
  + Nilai properti yang tidak dikembalikan oleh layanan yang bertanggung jawab atas sumber daya.

    Ada nilai properti tertentu yang, sesuai rancangannya, tidak pernah dikembalikan oleh layanan tempat sumber daya itu berada. Ini cenderung berisi informasi rahasia, seperti kata sandi atau data sensitif lainnya yang tidak boleh diekspos. Misalnya, layanan IAM tidak akan pernah mengembalikan nilai properti tipe `Password` [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html)properti, dan oleh karena itu tidak CloudFormation dapat menyertakannya dalam hasil deteksi drift.
  + Objek dalam array mungkin sebenarnya default layanan dan tidak drift ditambahkan secara manual.
+ Jika Anda menemukan positif palsu, kirimkan komentar Anda kepada kami menggunakan tautan umpan balik di CloudFormation konsol, atau hubungi kami melalui [AWS re:Post](https://repost.aws/).
+ Beberapa properti dapat memiliki nilai input yang sama tetapi tidak identik. Untuk menghindari kesalahan positif, Anda harus memastikan bahwa konfigurasi yang Anda harapkan cocok dengan konfigurasi yang sebenarnya.
  + Misalnya, konfigurasi properti sumber daya yang diharapkan dapat 1024 MB dan konfigurasi aktual dari properti sumber daya yang sama dapat 1GB. 1024 MB dan 1GB sama tetapi tidak identik.

    Ketika deteksi drift berjalan pada properti sumber daya ini, itu akan menandakan hasil drifted.

    Untuk menghindari positif palsu ini, ubah konfigurasi yang diharapkan dari properti resource menjadi 1024MB dan kemudian jalankan deteksi drift.

# Mendeteksi penyimpangan di seluruh tumpukan CloudFormation
<a name="detect-drift-stack"></a>

Melakukan operasi deteksi penyimpangan pada tumpukan menentukan apakah tumpukan telah menyimpang dari konfigurasi templat yang diharapkan, dan mengembalikan informasi terperinci tentang status penyimpangan setiap sumber daya dalam tumpukan yang mendukung deteksi penyimpangan.

**Untuk mendeteksi penyimpangan pada seluruh tumpukan menggunakan Konsol Manajemen AWS**

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Dari daftar tumpukan, pilih tumpukan tempat Anda ingin melakukan deteksi penyimpangan. Di panel detail tumpukan, pilih **Tindakan tumpukan**, lalu pilih **Deteksi penyimpangan**.  
![\[Perintah Deteksi penyimpangan untuk tumpukan saat ini dipilih pada menu Tindakan tumpukan untuk tumpukan yang dipilih.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/console-stacks-actions-detect-drift-1.png)

   CloudFormation menampilkan bilah informasi yang menyatakan bahwa deteksi drift telah dimulai untuk tumpukan yang dipilih.

1. Tunggu hingga CloudFormation menyelesaikan operasi deteksi drift. Saat operasi deteksi drift selesai, CloudFormation perbarui **status Drift dan waktu pemeriksaan drift** **terakhir untuk tumpukan** Anda. Bidang ini tercantum di bagian **Gambaran Umum** di panel **Info tumpukan** dari halaman detail tumpukan.

   Operasi deteksi penyimpangan mungkin memakan waktu beberapa menit, tergantung pada jumlah sumber daya yang disertakan dalam tumpukan. Anda hanya dapat menjalankan operasi deteksi drift tunggal pada tumpukan tertentu secara bersamaan. CloudFormation melanjutkan operasi deteksi drift bahkan setelah Anda mengabaikan bilah informasi.

1. Meninjau hasil deteksi penyimpangan untuk tumpukan dan sumber daya. Dengan tumpukan Anda dipilih, dari menu **Tindakan tumpukan** pilih **Lihat hasil penyimpangan**.

   CloudFormation mencantumkan status drift keseluruhan tumpukan, selain deteksi drift terakhir kali dimulai pada tumpukan atau sumber daya individualnya. Tumpukan dianggap telah menyimpang jika satu atau lebih dari sumber dayanya menyimpang.  
![\[Halaman Penyimpangan untuk tumpukan yang dipilih, menampilkan keseluruhan status penyimpangan tumpukan, status deteksi pergeseran, dan terakhir kali deteksi penyimpangan dimulai pada tumpukan atau sumber daya individualnya.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-overview-1.png)

   Di bagian **Status penyimpangan sumber daya**, CloudFormation daftar setiap sumber daya tumpukan, status driftnya, dan deteksi drift terakhir kali dimulai pada sumber daya. ID logis dan ID fisik setiap sumber daya ditampilkan untuk membantu Anda mengidentifikasinya. Selain itu, untuk sumber daya dengan status **MODIFIED**, CloudFormation menampilkan detail penyimpangan sumber daya.

   Anda dapat mengurutkan sumber daya berdasarkan status penyimpangannya menggunakan kolom **Status Penyimpangan**.

   1. Untuk melihat detail sumber daya yang dimodifikasi.

     1. Dengan sumber daya yang dimodifikasi dipilih, pilih **Lihat detail penyimpangan**.

       CloudFormation menampilkan halaman detail drift untuk sumber daya itu. Halaman ini mencantumkan nilai properti yang diharapkan dan saat ini dari sumber daya, dan perbedaan apa pun di antara keduanya.

       Untuk menyoroti perbedaan, di bagian **Perbedaan** pilih nama properti.
       + Properti yang ditambahkan disorot dalam warna hijau di kolom **Saat ini** di bagian **Detail**.
       + Properti yang dihapus disorot dalam warna merah di kolom **Diharapkan** di bagian **Detail**.
       + Properti yang nilainya telah diubah disorot warna kuning di kolom **Diharapkan** dan **Saat ini**.  
![\[Bagian status penyimpangan Sumber Daya di halaman Detail Penyimpangan, yang berisi informasi penyimpangan untuk setiap sumber daya dalam tumpukan yang mendukung deteksi penyimpangan. Detail termasuk status penyimpangan dan nilai properti yang diharapkan dan saat ini.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Untuk mendeteksi penyimpangan pada seluruh tumpukan menggunakan AWS CLI**
**penting**  
Tinjau **waktu pemeriksaan drift terakhir** untuk tumpukan dan konfirmasikan bahwa itu lebih awal dari stempel waktu yang ditunjukkan dalam hasil drift sumber daya untuk mencegah penggunaan data basi.

Untuk mendeteksi penyimpangan pada seluruh tumpukan menggunakan AWS CLI, gunakan AWS CLI perintah berikut:
+ **detect-stack-drift** untuk memulai operasi deteksi penyimpangan di tumpukan.
+ **describe-stack-drift-detection-status** untuk memantau status operasi deteksi penyimpangan tumpukan.
+ **describe-stack-resource-drifts** untuk meninjau detail operasi deteksi penyimpangan tumpukan.

1. Gunakan **detect-stack-drift** untuk mendeteksi penyimpangan di seluruh tumpukan. Tentukan nama tumpukan atau ARN. Anda juga dapat menentukan logika IDs sumber daya tertentu yang ingin Anda gunakan sebagai filter untuk operasi deteksi drift ini.

   ```
   aws cloudformation detect-stack-drift --stack-name my-stack-with-resource-drift
   ```

   Output:

   ```
   {
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample"
   }
   ```

1. Karena operasi deteksi penyimpangan tumpukan dapat berjalan lama, gunakan **describe-stack-drift-detection-status** untuk memantau status operasi penyimpangan. Perintah ini mengambil ID deteksi penyimpangan tumpukan yang dikembalikan oleh perintah **detect-stack-drift**.

   Dalam contoh di bawah ini, kami telah mengambil ID deteksi penyimpangan tumpukan yang dikembalikan oleh contoh **detect-stack-drift** di atas dan meneruskannya sebagai parameter ke **describe-stack-drift-detection-status**. Parameter mengembalikan detail operasi yang menunjukkan bahwa operasi deteksi penyimpangan telah selesai, sumber daya tumpukan tunggal telah menyimpang, dan bahwa seluruh tumpukan dianggap telah menyimpang sebagai hasilnya.

   ```
   aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
   ```

   Output:

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample", 
       "StackDriftStatus": "DRIFTED", 
       "Timestamp": "2018-03-26T17:23:22.279Z", 
       "DetectionStatus": "DETECTION_COMPLETE", 
       "DriftedStackResourceCount": 1
   }
   ```

1. Ketika operasi deteksi penyimpangan tumpukan selesai, gunakan perintah **describe-stack-resource-drifts** untuk meninjau hasil, termasuk nilai properti aktual dan yang diharapkan untuk sumber daya yang telah menyimpang.

   Contoh di bawah ini menggunakan `--stack-resource-drift-status-filters` opsi untuk meminta informasi stack drift untuk sumber daya yang telah dimodifikasi atau dihapus. Permintaan mengembalikan informasi tentang satu sumber daya yang telah dimodifikasi, termasuk detail tentang dua propertinya yang nilainya telah diubah. Tidak ada sumber daya yang telah dihapus.

   ```
   aws cloudformation describe-stack-resource-drifts --stack-name my-stack-with-resource-drift --stack-resource-drift-status-filters MODIFIED DELETED
   ```

   Output:

   ```
   {
       "StackResourceDrifts": [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
               "ActualProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":120,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":12},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
               "ResourceType": "AWS::SQS::Queue", 
               "Timestamp": "2018-03-26T17:23:34.489Z", 
               "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/099908667365/my-stack-with-resource-drift-Queue-494PBHCO76H4", 
               "StackResourceDriftStatus": "MODIFIED", 
               "ExpectedProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":10},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
               "PropertyDifferences": [
                   {
                       "PropertyPath": "/DelaySeconds", 
                       "ActualValue": "120", 
                       "ExpectedValue": "20", 
                       "DifferenceType": "NOT_EQUAL"
                   }, 
                   {
                       "PropertyPath": "/RedrivePolicy/maxReceiveCount", 
                       "ActualValue": "12", 
                       "ExpectedValue": "10", 
                       "DifferenceType": "NOT_EQUAL"
                   }
               ], 
               "LogicalResourceId": "Queue"
           }
       ]
   }
   ```

# Mendeteksi penyimpangan di sumber daya tumpukan individu
<a name="detect-drift-resource"></a>

Anda dapat mendeteksi penyimpangan di sumber daya tertentu dalam satu tumpukan, bukan di seluruh tumpukan. Ini sangat berguna ketika Anda hanya perlu menentukan apakah sumber daya tertentu sekarang cocok dengan konfigurasi templat yang diharapkan lagi.

Saat melakukan deteksi drift pada sumber daya, CloudFormation juga memperbarui status tumpukan drift keseluruhan dan **waktu pemeriksaan drift terakhir**, jika berlaku. Misalnya, tumpukan memiliki status drift. `IN_SYNC` Anda telah CloudFormation melakukan deteksi drift pada satu atau lebih sumber daya yang terkandung dalam tumpukan itu, dan CloudFormation mendeteksi bahwa satu atau lebih sumber daya tersebut telah hanyut. CloudFormation memperbarui status stack drift ke`DRIFTED`. Sebaliknya, misalkan Anda memiliki tumpukan dengan status drift `DRIFTED` karena sumber daya hanyut tunggal. Jika Anda menyetel sumber daya itu kembali ke nilai properti yang diharapkan, dan kemudian mendeteksi penyimpangan pada sumber daya lagi, CloudFormation akan memperbarui status drift sumber daya dan status drift tumpukan `IN_SYNC` tanpa mengharuskan Anda mendeteksi penyimpangan di seluruh tumpukan lagi.

**Untuk mendeteksi penyimpangan pada sumber daya individu menggunakan Konsol Manajemen AWS**

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Dari daftar tumpukan, pilih tumpukan yang berisi sumber daya tersebut. CloudFormation menampilkan detail tumpukan untuk tumpukan tersebut.

1. Di panel navigasi kiri, di bawah **Tumpukan**, pilih **Tindakan tumpukan**, lalu pilih **Deteksi penyimpangan**.

1. Di bawah **Status penyimpangan sumber daya**, pilih sumber daya dan kemudian pilih **Deteksi penyimpangan untuk sumber daya**.

   CloudFormation melakukan deteksi drift pada sumber daya yang dipilih. Jika berhasil, CloudFormation perbarui status drift sumber daya, dan status tumpukan drift keseluruhan, jika perlu. CloudFormation juga memperbarui stempel waktu kapan deteksi drift terakhir dilakukan pada sumber daya, dan tumpukan secara keseluruhan. Jika sumber daya telah dimodifikasi, CloudFormation menampilkan informasi drift terperinci tentang nilai properti yang diharapkan dan saat ini dari sumber daya.

1. Meninjau hasil deteksi penyimpangan untuk sumber daya.

   1. Untuk melihat detail sumber daya yang dimodifikasi.

     1. Dengan sumber daya yang dimodifikasi dipilih, pilih **Lihat detail penyimpangan**.

       CloudFormation menampilkan detail drift untuk sumber daya tersebut, termasuk nilai properti yang diharapkan dan saat ini sumber daya, dan perbedaan apa pun di antara keduanya.

       Untuk menyoroti perbedaan, di bagian **Perbedaan** pilih nama properti.
       + Properti yang ditambahkan disorot dalam warna hijau di kolom **Saat ini** di bagian **Detail**.
       + Properti yang dihapus disorot dalam warna merah di kolom **Diharapkan** di bagian **Detail**.
       + Properti yang nilainya telah diubah disorot warna kuning di kolom **Diharapkan** dan **Saat ini**.  
![\[Bagian status penyimpangan Sumber Daya di halaman Detail Penyimpangan, yang berisi informasi penyimpangan untuk setiap sumber daya dalam tumpukan yang mendukung deteksi penyimpangan. Detail termasuk status penyimpangan dan nilai properti yang diharapkan dan saat ini.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Untuk mendeteksi penyimpangan pada sumber daya individu menggunakan AWS CLI**
+ 
**penting**  
Tinjau **waktu pemeriksaan drift terakhir** untuk sumber daya tumpukan dan konfirmasikan bahwa itu lebih awal dari stempel waktu yang ditunjukkan dalam hasil drift sumber daya untuk mencegah penggunaan data basi.

  Untuk mendeteksi penyimpangan pada sumber daya individu menggunakan AWS CLI, gunakan **detect-stack-resource-drift** perintah. Tentukan ID logis dari sumber daya dan tumpukan di dalamnya.

  Contoh berikut menjalankan operasi deteksi drift pada sumber daya tumpukan tertentu,`my-drifted-resource`. Respons mengembalikan informasi yang mengonfirmasi bahwa sumber daya telah dimodifikasi, termasuk detail tentang dua propertinya yang nilainya telah diubah.

  ```
  aws cloudformation detect-stack-resource-drift \
      --stack-name my-stack-with-resource-drift \
      --logical-resource-id my-drifted-resource
  ```

  Output:

  ```
  {
      "StackResourceDrift": {
          "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
          "ActualProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":120,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":12},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "ResourceType": "AWS::SQS::Queue", 
          "Timestamp": "2018-03-26T18:54:28.462Z", 
          "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/099908667365/my-stack-with-resource-drift-Queue-494PBHCO76H4", 
          "StackResourceDriftStatus": "MODIFIED", 
          "ExpectedProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":10},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "PropertyDifferences": [
              {
                  "PropertyPath": "/DelaySeconds", 
                  "ActualValue": "120", 
                  "ExpectedValue": "20", 
                  "DifferenceType": "NOT_EQUAL"
              }, 
              {
                  "PropertyPath": "/RedrivePolicy/maxReceiveCount", 
                  "ActualValue": "12", 
                  "ExpectedValue": "10", 
                  "DifferenceType": "NOT_EQUAL"
              }
          ], 
          "LogicalResourceId": "my-drifted-resource"
      }
  }
  ```

# Mengatasi penyimpangan dengan operasi impor
<a name="resource-import-resolve-drift"></a>

Mungkin ada kasus di mana konfigurasi sumber daya telah menyimpang dari konfigurasi yang dimaksudkan dan Anda ingin menerima konfigurasi baru sebagai konfigurasi yang dimaksudkan. Dalam kebanyakan kasus, Anda akan mengatasi hasil penyimpangan dengan memperbarui definisi sumber daya di templat tumpukan dengan konfigurasi baru dan kemudian melakukan pembaruan tumpukan. Namun, jika konfigurasi baru memperbarui properti sumber daya yang memerlukan penggantian, sumber daya akan dibuat ulang selama pembaruan tumpukan. Jika Anda ingin mempertahankan sumber daya yang ada, Anda dapat menggunakan fitur impor sumber daya untuk memperbarui sumber daya dan menyelesaikan hasil penyimpangan tanpa menyebabkan sumber daya diganti.

Mengatasi penyimpangan untuk sumber daya melalui operasi impor terdiri dari langkah-langkah dasar berikut:
+ [Tambahkan DeletionPolicy atribut, atur ke Retain, ke sumber daya](#resource-import-resolve-drift-console-step-01-update-stack). Hal ini memastikan sumber daya yang ada dipertahankan bukannya dihapus saat dihilangkan dari tumpukan.
+ [Hapus sumber daya dari templat dan jalankan operasi pembaruan tumpukan](#resource-import-resolve-drift-console-step-02-remove-drift). Hal ini akan menghilangkan sumber daya dari tumpukan, tetapi tidak menghapusnya.
+ [Jelaskan status aktual sumber daya dalam templat tumpukan, lalu impor kembali sumber daya yang ada ke dalam tumpukan](#resource-import-resolve-drift-console-step-03-update-template). Hal ini menambahkan sumber daya kembali ke tumpukan dan mengatasi perbedaan properti yang menyebabkan hasil penyimpangan.

Untuk informasi selengkapnya tentang impor sumber daya, lihat[Impor AWS sumber daya ke CloudFormation tumpukan secara manual](import-resources-manually.md). Untuk daftar sumber daya yang mendukung impor, lihat[Dukungan jenis sumber daya](resource-import-supported-resources.md).

Dalam contoh ini, kita menggunakan template berikut, bernama`templateToImport.json`.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PROVISIONED",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
  GamesTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Games
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
```

------

Dalam contoh ini, mari kita asumsikan pengguna mengubah sumber daya di luar CloudFormation. Setelah menjalankan deteksi penyimpangan, kita menemukan bahwa `GamesTable` telah dimodifikasi `BillingMode` menjadi `PAY_PER_REQUEST`. Untuk informasi lebih lanjut tentang deteksi drift, lihat[Mendeteksi perubahan konfigurasi yang tidak terkelola pada tumpukan dan sumber daya dengan deteksi drift](using-cfn-stack-drift.md).

![\[Hasil tumpukan menampilkan hasil yang diharapkan dan aktual di konsol.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/drift-results-gamestable.png)


Tumpukan kita sekarang sudah kedaluwarsa, sumber daya kita aktif, tetapi kita ingin mempertahankan konfigurasi sumber daya yang dimaksud. Kita dapat melakukan ini dengan mengatasi penyimpangan melalui operasi impor, tanpa mengganggu layanan.

## Selesaikan drift dengan operasi impor menggunakan konsol CloudFormation
<a name="resource-import-resolve-drift-console"></a>

### Langkah 1. Memperbarui tumpukan dengan kebijakan penghapusan Pertahankan
<a name="resource-import-resolve-drift-console-step-01-update-stack"></a>

**Untuk memperbarui tumpukan menggunakan atribut `DeletionPolicy` dengan opsi `Retain`**

1. Masuk ke Konsol Manajemen AWS dan buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada halaman **Stacks**, pilih tumpukan yang telah hanyut.

1. Pilih **Perbarui**, lalu pilih **Ganti templat saat ini** dari panel detail tumpukan.

1. Di halaman **Tentukan templat**, berikan templat terbaru Anda yang berisi atribut `DeletionPolicy` dengan opsi `Retain` menggunakan salah satu metode berikut:
   + Pilih **URL Amazon S3**, lalu tentukan URL untuk templat Anda di kotak teks.
   + Pilih **Unggah file templat**, lalu telusuri templat Anda.

   Lalu, pilih **Selanjutnya**.

1. Tinjau halaman **Tentukan detail tumpukan** dan pilih **Selanjutnya**.

1. Tinjau halaman **Konfigurasikan opsi tumpukan**, dan pilih **Selanjutnya**.

1. Pada *stack-name* halaman **Review**, pilih **Update stack**.

*Hasil*: Di halaman **Peristiwa** dari tumpukan Anda, statusnya adalah `UPDATE_COMPLETE`.

Untuk mengatasi drift melalui operasi impor, tanpa mengganggu layanan, tentukan sumber daya yang `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)ingin Anda hapus dari tumpukan Anda. Dalam contoh berikut, kita telah menambahkan [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)atribut, set ke`Retain`, ke `GamesTable` sumber daya.

------
#### [ Example JSON ]

```
    "GamesTable": {
        "Type": "AWS::DynamoDB::Table",
        "DeletionPolicy": "Retain",
        "Properties": {
            "TableName": "Games",
```

------
#### [ Example YAML ]

```
  GamesTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    Properties:
      TableName: Games
```

------

### Langkah 2. Menghapus sumber daya menyimpang, parameter terkait, dan output
<a name="resource-import-resolve-drift-console-step-02-remove-drift"></a>

**Untuk menghapus sumber daya menyimpang, parameter terkait, dan output**

1. Pilih **Perbarui**, lalu pilih **Ganti templat saat ini** dari panel detail tumpukan.

1. Di halaman **Tentukan templat**, berikan templat Anda yang diperbarui dengan sumber dayanya, parameter terkait, dan output yang dihapus dari templat tumpukan menggunakan salah satu metode berikut:
   + Pilih **URL Amazon S3**, lalu tentukan URL untuk templat Anda di kotak teks.
   + Pilih **Unggah file templat**, lalu telusuri templat Anda.

   Lalu, pilih **Selanjutnya**.

1. Tinjau halaman **Tentukan detail tumpukan** dan pilih **Selanjutnya**.

1. Tinjau halaman **Konfigurasikan opsi tumpukan**, dan pilih **Selanjutnya**.

1. Pada *stack-name* halaman **Review**, pilih **Update stack**.

*Hasil*: **ID Logis** `GamesTable` memiliki status `DELETE_SKIPPED` di halaman **Peristiwa** dari tumpukan Anda.

Tunggu hingga CloudFormation menyelesaikan operasi pembaruan tumpukan. Setelah operasi pembaruan tumpukan selesai, hapus sumber daya, parameter terkait, dan output dari templat tumpukan. Kemudian, impor templat yang telah diperbarui. Setelah menyelesaikan tindakan ini, templat contoh sekarang terlihat seperti berikut ini.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
```

------

### Langkah 3. Perbarui templat untuk mencocokkan status aktif sumber daya Anda
<a name="resource-import-resolve-drift-console-step-03-update-template"></a>

**Untuk memperbarui templat untuk mencocokkan status aktif sumber daya Anda**

1. Untuk mengimpor template yang diperbarui, pilih **Tindakan tumpukan** lalu pilih **Impor sumber daya ke tumpukan**.  
![\[Opsi Impor sumber daya ke tumpukan di konsol.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

1. Tinjau halaman **Gambaran umum impor** daftar hal-hal yang harus Anda berikan selama operasi ini, lalu pilih **Selanjutnya**.

1. Di halaman **Tentukan templat**, berikan templat Anda yang telah diperbarui menggunakan salah satu metode berikut:
   + Pilih **URL Amazon S3**, lalu tentukan URL untuk templat Anda di kotak teks.
   + Pilih **Unggah file templat**, lalu telusuri templat Anda.

   Lalu, pilih **Selanjutnya**.

1. Di halaman **Identifikasi sumber daya**, identifikasi setiap sumber daya target. Untuk informasi selengkapnya, lihat [Pengidentifikasi sumber daya](import-resources-manually.md#resource-import-identifiers-unique-ids).

   1. Di bawah **Properti pengenal**, pilih jenis pengenal sumber daya. Misalnya, properti `TableName` mengidentifikasi sumber daya `AWS::DynamoDB::Table`.

   1. Di bawah **Nilai pengenal**, masukkan nilai properti yang sebenarnya. Dalam contoh templat, `TableName` untuk sumber daya `GamesTable` adalah `Games`.

   1. Pilih **Berikutnya**.

1. Tinjau halaman **Tentukan detail tumpukan**, dan pilih **Selanjutnya**.

1. Di halaman **Gambaran umum impor**, tinjau sumber daya yang diimpor, kemudian pilih **Impor sumber daya**. Ini akan mengimpor jenis sumber daya `AWS::DynamoDB::Table` kembali ke tumpukan Anda.

*Hasil*: Dalam contoh ini, kita mengatasi penyimpangan sumber daya melalui operasi impor, tanpa mengganggu layanan. Anda dapat memeriksa kemajuan tindakan impor di CloudFormation konsol di tab Acara. Sumber daya yang diimpor akan memiliki status `IMPORT_COMPLETE` diikuti oleh status `CREATE_COMPLETE` dengan **Impor sumber daya selesai**sebagai alasan status.

Tunggu hingga CloudFormation menyelesaikan operasi pembaruan tumpukan. Setelah operasi pembaruan tumpukan selesai, perbarui templat Anda agar sesuai dengan status aktual sumber daya Anda yang menyimpang. Misalnya, `BillingMode` akan diatur ke `PAY_PER_REQUEST` dan `ReadCapacityUnits` serta `WriteCapacityUnits` akan diatur ke `0`.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "DeletionPolicy": "Retain",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PAY_PER_REQUEST",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 0,
                    "WriteCapacityUnits": 0
                }
            }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
  GamesTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    Properties:
      TableName: Games
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PAY_PER_REQUEST
      ProvisionedThroughput:
        ReadCapacityUnits: 0
        WriteCapacityUnits: 0
```

------