Mengotomatiskan penghapusan AWS CloudFormation tumpukan dan sumber daya terkait - AWS Prescriptive Guidance

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:

    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

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.

Fase yang menemukan, memproses, dan menghapus CloudFormation tumpukan dan sumber daya terkait.

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

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

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

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

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

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

  1. Buat folder di lingkungan virtual Anda. Beri nama dengan nama proyek Anda.

  2. Buka terminal di mesin lokal Anda, dan arahkan ke folder ini.

  3. Masukkan perintah berikut untuk mengkloning cloudformation-stack-cleanuprepositori ke direktori proyek Anda:

    git clone https://github.com/aws-samples/cloudformation-stack-cleanup.git
DevOps insinyur

Instal Puisi.

Ikuti instruksi (Dokumentasi puisi) untuk menginstal Puisi di lingkungan virtual target.

DevOps insinyur

Instal dependensi.

  1. Masukkan perintah berikut untuk menavigasi ke direktori proyek:

    cd cloudformation-stack-cleanup
  2. Masukkan perintah berikut:

    poetry install

    Ini menginstal semua dependensi yang diperlukan, seperti Boto3, klik, dan kode sumber untuk CLI. CloudFormation

DevOps insinyur

(Opsional) Instal Pyenv.

Ikuti instruksi (GitHub) untuk menginstal Pyenv.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat fungsi yang mengumpulkan, pra-proses, dan menghapus sumber daya target.

  1. Di repositori kloning, masukkan perintah berikut untuk menavigasi ke direktori: cli

    cd cfncli/cli
  2. Buka file cleanup_enviornment.py.

  3. Buat fungsi Python baru yang mengumpulkan jenis sumber daya yang ingin Anda modifikasi. Sebagai contoh, lihat gather_ddb_tables fungsi dalam file ini.

  4. Buat fungsi Python baru yang mengesampingkan kendala layanan untuk sumber daya target. Sebagai contoh, lihat remove_ddb_deletion_protection fungsi dalam file ini.

  5. Buat fungsi Python baru yang mengumpulkan sumber daya target yang tidak dikelola. Sebagai contoh, lihat gather_log_groups fungsi dalam file ini.

  6. Buat fungsi Python baru yang menghapus sumber daya target yang tidak dikelola. Sebagai contoh, lihat delete_log_group fungsi dalam file ini.

  7. Simpan dan tutup file cleanup_enviornment.py.

DevOps insinyur, Python
TugasDeskripsiKeterampilan yang dibutuhkan

Buat CloudFormation tumpukan.

  1. Arahkan ke direktori proyek .

  2. Masukkan perintah berikut untuk membuat CloudFormation tumpukan yang menyediakan tabel DynamoDB dan grup keamanan. Perbarui nilai untuk<VPCID>:

    aws cloudformation create-stack \ --stack-name sampleforcleanup-Stack \ --template-body file://samples/sample-cfn-stack.yaml \ --parameters ParameterKey=VpcId,ParameterValue=<VPCID> \ --region us-east-1
AWS DevOps

Buat parameter Systems Manager.

Masukkan perintah berikut untuk membuat parameter Systems Manager yang tidak disediakan melalui: CloudFormation

aws ssm put-parameter \ --name "/sampleforcleanup/database/password" \ --value "your_db_password" \ --type "SecureString" \ --description "Database password for my app" \ --tier "Standard" \ --region "us-east-1"
AWS DevOps

Buat bucket Amazon S3.

Masukkan perintah berikut untuk membuat bucket Amazon S3 yang tidak disediakan melalui: CloudFormation

aws s3api create-bucket \ --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \ --region us-east-1 \ --create-bucket-configuration LocationConstraint=us-east-1
AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus CloudFormation tumpukan.

  1. Masukkan perintah berikut untuk menghapus CloudFormation tumpukan sampel, parameter Systems Manager, dan bucket Amazon S3 yang Anda buat:

    cfncli --region us-east-1 \ dev cleanup-env \ --prefix-list sampleforcleanup
  2. Saat diminta, masukkan Y untuk melanjutkan.

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

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']