

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

# Mengotomatiskan penghapusan AWS CloudFormation tumpukan dan sumber daya terkait
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*SANDEEP SINGH dan James Jacob, Amazon Web Services*

## Ringkasan
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)adalah layanan yang banyak digunakan untuk mengelola infrastruktur cloud sebagai kode (IAc). Saat Anda menggunakan CloudFormation, Anda mengelola sumber daya terkait sebagai satu unit yang disebut *tumpukan*. Anda membuat, memperbarui, dan menghapus kumpulan sumber daya dengan membuat, memperbarui, dan menghapus tumpukan.

Terkadang, Anda tidak lagi membutuhkan sumber daya dalam CloudFormation tumpukan. Bergantung pada sumber daya dan konfigurasinya, mungkin rumit untuk menghapus tumpukan dan sumber daya yang terkait. Dalam sistem produksi dunia nyata, penghapusan terkadang gagal atau memakan waktu lama karena kondisi yang saling bertentangan atau pembatasan yang tidak dapat mengesampingkan. CloudFormation Ini dapat memerlukan perencanaan dan pelaksanaan yang cermat untuk memastikan bahwa semua sumber daya dihapus dengan benar secara efisien dan konsisten. Pola ini menjelaskan cara menyiapkan kerangka kerja yang membantu Anda mengelola penghapusan CloudFormation tumpukan yang melibatkan kompleksitas berikut:
+ **Sumber daya dengan perlindungan hapus** - Beberapa sumber daya mungkin mengaktifkan perlindungan penghapusan. Contoh umum adalah tabel [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) dan bucket [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)). Hapus perlindungan mencegah penghapusan otomatis, seperti penghapusan melalui. CloudFormation Jika Anda ingin menghapus sumber daya ini, Anda harus secara manual atau terprogram mengganti atau menonaktifkan sementara perlindungan hapus. Anda harus hati-hati mempertimbangkan implikasi dari menghapus sumber daya ini sebelum melanjutkan.
+ **Sumber daya dengan kebijakan penyimpanan** — Sumber daya tertentu, seperti kunci AWS Key Management Service (AWS KMS) dan bucket Amazon S3, mungkin memiliki kebijakan penyimpanan yang menentukan berapa lama sumber daya tersebut harus dipertahankan setelah penghapusan diminta. Anda harus memperhitungkan kebijakan ini dalam strategi pembersihan untuk menjaga kepatuhan terhadap kebijakan organisasi dan persyaratan peraturan.
+ **Penghapusan fungsi Lambda yang tertunda yang dilampirkan ke VPC** — Menghapus [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)fungsi yang dilampirkan ke cloud pribadi virtual (VPC) dapat memakan waktu 5—40 menit, tergantung beberapa dependensi yang saling berhubungan yang terlibat dalam proses. Jika Anda melepaskan fungsi dari VPC sebelum menghapus tumpukan, Anda dapat mengurangi penundaan ini menjadi kurang dari 1 menit.
+ **Sumber daya tidak dibuat secara langsung oleh CloudFormation** — Dalam desain aplikasi tertentu, sumber daya mungkin dibuat di luar CloudFormation tumpukan asli, baik oleh aplikasi itu sendiri atau oleh sumber daya yang disediakan melalui tumpukan. Berikut ini adalah dua contoh:
  + CloudFormation mungkin menyediakan instance [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) yang menjalankan skrip data pengguna. Kemudian, skrip ini mungkin membuat [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)parameter untuk menyimpan data terkait aplikasi. Parameter ini tidak dikelola melalui CloudFormation.
  + CloudFormation mungkin menyediakan fungsi Lambda yang secara otomatis menghasilkan grup [Amazon CloudWatch Logs untuk menyimpan log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). Grup log ini tidak dikelola melalui CloudFormation.

  Meskipun sumber daya ini tidak dikelola secara langsung oleh CloudFormation, mereka sering perlu dibersihkan ketika tumpukan dihapus. Jika dibiarkan tidak dikelola, mereka dapat menjadi yatim piatu dan menyebabkan konsumsi sumber daya yang tidak perlu.

Meskipun pagar pembatas ini dapat menyebabkan kompleksitas, mereka disengaja dan kritis. Mengizinkan CloudFormation untuk mengesampingkan semua kendala dan menghapus sumber daya tanpa pandang bulu dapat menyebabkan konsekuensi yang merugikan dan tidak terduga dalam banyak skenario. Namun, sebagai seorang DevOps atau insinyur cloud yang bertanggung jawab untuk mengelola lingkungan, ada kalanya mengesampingkan kendala ini mungkin diperlukan, terutama dalam pengembangan, pengujian, atau lingkungan pementasan.

**Hasil bisnis yang ditargetkan**

Dengan menerapkan kerangka kerja ini, Anda dapat mencapai manfaat berikut:
+ **Manajemen biaya** — Pembersihan lingkungan sementara yang teratur dan efisien, seperti end-to-end atau lingkungan pengujian penerimaan pengguna, membantu mencegah sumber daya berjalan lebih lama dari yang diperlukan. Ini dapat secara signifikan mengurangi biaya.
+ **Keamanan** — Pembersihan otomatis sumber daya yang sudah ketinggalan zaman atau tidak terpakai mengurangi permukaan serangan dan membantu menjaga lingkungan yang aman. AWS 
+ **Efisiensi operasional** - Pembersihan rutin dan otomatis dapat memberikan manfaat operasional berikut:
  + Skrip otomatis yang menghapus grup log lama atau bucket Amazon S3 kosong dapat meningkatkan efisiensi operasional dengan menjaga lingkungan tetap bersih dan mudah dikelola.
  + Menghapus dan membuat ulang tumpukan dengan cepat mendukung iterasi cepat untuk desain dan implementasi, yang dapat menghasilkan arsitektur yang lebih kuat dan tangguh.
  + Menghapus dan membangun kembali lingkungan secara teratur dapat membantu Anda mengidentifikasi dan memperbaiki potensi masalah. Ini dapat membantu Anda memastikan bahwa infrastruktur dapat bertahan dalam skenario dunia nyata.

## Prasyarat dan batasan
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ [Python versi 3.6 atau yang lebih baru, diinstal](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Batasan**
+ Konvensi penamaan digunakan untuk mengidentifikasi sumber daya yang harus dihapus. Kode sampel dalam pola ini menggunakan awalan untuk nama sumber daya, tetapi Anda dapat menentukan konvensi penamaan Anda sendiri. Sumber daya yang tidak menggunakan konvensi penamaan ini tidak akan diidentifikasi atau kemudian dihapus.

## Arsitektur
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

Diagram berikut menunjukkan bagaimana kerangka kerja ini mengidentifikasi CloudFormation tumpukan target dan sumber daya tambahan yang terkait dengannya.

![\[Fase yang menemukan, memproses, dan menghapus CloudFormation tumpukan dan sumber daya terkait.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


Diagram menunjukkan alur kerja berikut:

1. **Kumpulkan sumber daya** — Kerangka kerja otomatisasi menggunakan konvensi penamaan untuk mengembalikan semua CloudFormation tumpukan yang relevan, repositori Amazon Elastic Container Registry (Amazon ECR), tabel DynamoDB, dan bucket Amazon S3.
**catatan**  
Fungsi untuk tahap ini menggunakan [paginator](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), fitur di Boto3 yang mengabstraksi proses iterasi di atas set hasil API terpotong. Ini memastikan bahwa semua sumber daya diproses. [Untuk lebih mengoptimalkan kinerja, pertimbangkan untuk menerapkan pemfilteran [sisi server](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

1. **Pra-pemrosesan** — Kerangka otomatisasi mengidentifikasi dan mengatasi kendala layanan yang harus diganti agar memungkinkan untuk menghapus sumber daya. CloudFormation Misalnya, mengubah `DeletionProtectionEnabled` pengaturan untuk tabel DynamoDB menjadi. `False` Di antarmuka baris perintah, untuk setiap sumber daya, Anda menerima prompt yang menanyakan apakah Anda ingin mengganti kendala.

1. **Hapus tumpukan** - Kerangka otomatisasi menghapus CloudFormation tumpukan. Di antarmuka baris perintah, Anda menerima prompt yang menanyakan apakah Anda ingin menghapus tumpukan.

1. **Pasca-pemrosesan** - Kerangka otomatisasi menghapus sumber daya terkait yang tidak disediakan secara langsung CloudFormation sebagai bagian dari tumpukan. Contoh jenis sumber daya ini termasuk parameter Systems Manager dan grup CloudWatch log. Fungsi terpisah mengumpulkan sumber daya ini, memprosesnya terlebih dahulu, dan kemudian menghapusnya. Di antarmuka baris perintah, untuk setiap sumber daya, Anda menerima prompt yang menanyakan apakah Anda ingin menghapus sumber daya.
**catatan**  
Fungsi untuk tahap ini menggunakan [paginator](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), fitur di Boto3 yang mengabstraksi proses iterasi di atas set hasil API terpotong. Ini memastikan bahwa semua sumber daya diproses. [Untuk lebih mengoptimalkan kinerja, pertimbangkan untuk menerapkan pemfilteran [sisi server](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

**Otomatisasi dan skala**

Jika CloudFormation tumpukan Anda menyertakan sumber daya lain yang tidak termasuk dalam kode sampel, atau jika tumpukan memiliki kendala yang belum ditangani dalam pola ini, maka Anda dapat menyesuaikan kerangka kerja otomatisasi untuk kasus penggunaan Anda. Ikuti metodologi yang sama untuk mengumpulkan sumber daya, pra-pemrosesan, menghapus tumpukan, dan kemudian pasca-pemrosesan.

## Alat
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
+ [CloudFormation Command Line Interface (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) adalah alat open source yang membantu Anda mengembangkan dan menguji dan ekstensi pihak ketiga AWS dan kemudian mendaftarkannya untuk digunakan. CloudFormation
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

**Alat lainnya**
+ [Klik](https://click.palletsprojects.com/en/stable/) adalah alat Python yang membantu Anda membuat antarmuka baris perintah.
+ [Puisi](https://python-poetry.org/docs/) adalah alat untuk manajemen ketergantungan dan pengemasan dengan Python.
+ [Pyenv](https://github.com/pyenv/pyenv) adalah alat yang membantu Anda mengelola dan beralih antar versi Python.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)repositori.

## Praktik terbaik
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Menandai sumber daya untuk identifikasi yang mudah** — Menerapkan [strategi penandaan](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) untuk mengidentifikasi sumber daya yang dibuat untuk lingkungan dan tujuan yang berbeda. Tag dapat menyederhanakan proses pembersihan dengan membantu Anda memfilter sumber daya berdasarkan tag mereka.
+ **Siapkan siklus hidup sumber daya** — Tentukan siklus hidup sumber daya untuk menghapus sumber daya secara otomatis setelah periode tertentu. Praktik ini membantu Anda memastikan bahwa lingkungan sementara tidak menjadi kewajiban biaya permanen.

## Epik
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Instal alat
<a name="install-tools"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur | 
| Instal Puisi. | Ikuti [instruksi](https://python-poetry.org/docs/) (Dokumentasi puisi) untuk menginstal Puisi di lingkungan virtual target. | DevOps insinyur | 
| Instal dependensi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur | 
| (Opsional) Instal Pyenv. | Ikuti [instruksi](https://github.com/pyenv/pyenv#installation) (GitHub) untuk menginstal Pyenv. | DevOps insinyur | 

### (Opsional) Sesuaikan kerangka kerja
<a name="optional-customize-the-framework"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi yang mengumpulkan, pra-proses, dan menghapus sumber daya target. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur, Python | 

### Buat sumber daya sampel
<a name="create-sample-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Buat parameter Systems Manager. | Masukkan perintah berikut untuk membuat parameter Systems Manager yang tidak disediakan melalui: CloudFormation<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Buat bucket Amazon S3. | Masukkan perintah berikut untuk membuat bucket Amazon S3 yang tidak disediakan melalui: CloudFormation<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Hapus sumber daya sampel
<a name="delete-the-sample-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Validasi penghapusan sumber daya. | Dalam output, konfirmasikan bahwa semua sumber daya sampel telah dihapus. Untuk keluaran sampel, lihat bagian [Sumber daya tambahan](#automate-deletion-cloudformation-stacks-associated-resources-additional) dari pola ini. | AWS DevOps | 

## Sumber daya terkait
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Hapus tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation dokumentasi)
+ [Pemecahan masalah CloudFormation (dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)) CloudFormation 
+ [Memberikan fungsi Lambda akses ke sumber daya di Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (dokumentasi Lambda)
+ [Bagaimana cara menghapus AWS CloudFormation tumpukan yang macet dalam status DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Pusat AWS Pengetahuan)

## Informasi tambahan
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

Berikut ini adalah contoh output dari `cfncli` perintah:

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```