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
SANDEEP SINGH dan James Jacob, Amazon Web Services
Ringkasan
AWS CloudFormationadalah 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 dan bucket Amazon Simple Storage Service (Amazon S3). 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 Lambdafungsi 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) yang menjalankan skrip data pengguna. Kemudian, skrip ini mungkin membuat AWS Systems Managerparameter 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. 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
Prasyarat
Aktif Akun AWS
AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi
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
Diagram berikut menunjukkan bagaimana kerangka kerja ini mengidentifikasi CloudFormation tumpukan target dan sumber daya tambahan yang terkait dengannya.

Diagram menunjukkan alur kerja berikut:
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
, 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 atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien. 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.Hapus tumpukan - Kerangka otomatisasi menghapus CloudFormation tumpukan. Di antarmuka baris perintah, Anda menerima prompt yang menanyakan apakah Anda ingin menghapus tumpukan.
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
, 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 atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien.
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
Layanan AWS
AWS CloudFormationmembantu 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) 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)
adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS
Alat-alat lainnya
Klik
adalah alat Python yang membantu Anda membuat antarmuka baris perintah. Puisi
adalah alat untuk manajemen ketergantungan dan pengemasan dengan Python. Pyenv
adalah alat yang membantu Anda mengelola dan beralih antar versi Python. Python adalah bahasa
pemrograman komputer tujuan umum.
Repositori kode
Kode untuk pola ini tersedia di GitHub cloudformation-stack-cleanup
Praktik terbaik
Menandai sumber daya untuk identifikasi yang mudah — Menerapkan strategi penandaan
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
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning repositori. |
| DevOps insinyur |
Instal Puisi. | Ikuti instruksi | DevOps insinyur |
Instal dependensi. |
| DevOps insinyur |
(Opsional) Instal Pyenv. | Ikuti instruksi | DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat fungsi yang mengumpulkan, pra-proses, dan menghapus sumber daya target. |
| DevOps insinyur, Python |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat CloudFormation tumpukan. |
| AWS DevOps |
Buat parameter Systems Manager. | Masukkan perintah berikut untuk membuat parameter Systems Manager yang tidak disediakan melalui: CloudFormation
| AWS DevOps |
Buat bucket Amazon S3. | Masukkan perintah berikut untuk membuat bucket Amazon S3 yang tidak disediakan melalui: CloudFormation
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Hapus CloudFormation tumpukan. |
| AWS DevOps |
Validasi penghapusan sumber daya. | Dalam output, konfirmasikan bahwa semua sumber daya sampel telah dihapus. Untuk keluaran sampel, lihat bagian Sumber daya tambahan dari pola ini. | AWS DevOps |
Sumber daya terkait
Hapus tumpukan (CloudFormation dokumentasi)
Pemecahan masalah CloudFormation (dokumentasi) CloudFormation
Memberikan fungsi Lambda akses ke sumber daya di Amazon VPC (dokumentasi Lambda)
Bagaimana cara menghapus AWS CloudFormation tumpukan yang macet dalam status DELETE_FAILED?
(Pusat AWS Pengetahuan)
Informasi tambahan
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']