View a markdown version of this page

Rancang aplikasi Anda untuk menangani penghentian instans dengan anggun - Amazon EC2 Auto Scaling

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

Rancang aplikasi Anda untuk menangani penghentian instans dengan anggun

Topik ini menjelaskan fitur yang dapat Anda gunakan untuk mencegah grup Penskalaan Otomatis Amazon EC2 menghentikan instans Amazon EC2 yang belum siap untuk dihentikan. Secara default, Auto Scaling tidak memiliki visibilitas ke aplikasi yang berjalan pada instans Anda. Ini dapat menghentikan instans sebelum aplikasi Anda dapat dengan lancar mematikan atau menyelesaikan pekerjaan yang ditugaskan. Fitur-fitur ini memberi aplikasi Anda waktu untuk menyelesaikan pekerjaan yang sedang berlangsung, mentransfer status, atau melakukan pembersihan sebelum penghentian instans. Anda dapat menggunakannya secara individual atau dalam kombinasi tergantung pada persyaratan aplikasi Anda.

Fitur-fitur ini sangat berguna untuk beban kerja stateful, di mana setiap instans dalam armada Anda menyimpan data, pekerjaan, atau status yang berbeda dari instans lain. Mengakhiri instans stateful tanpa shutdown yang lancar dapat mengakibatkan pekerjaan yang berjalan lama dimulai ulang dari awal, mengurangi redundansi data atau kehilangan data, dan terganggu transaksi atau perhitungan yang sedang berlangsung. Untuk mematikan instans stateful dengan lancar, beban kerjanya harus dikeringkan (menyelesaikan semua pekerjaan yang ditugaskan saat ini) atau ditransfer (memindahkan pekerjaan, data, atau konfigurasi ke instance aktif lain).

Kait siklus hidup penghentian

Pengait siklus hidup penghentian memperpanjang umur instans Amazon EC2 yang sudah dipilih untuk penghentian. Ini memberikan waktu ekstra untuk menyelesaikan pekerjaan dalam proses yang saat ini ditugaskan ke instance, atau untuk menyimpan kemajuan dan mentransfer pekerjaan ke instance lain.

Untuk banyak beban kerja, kait siklus hidup terminasi mungkin cukup untuk mematikan aplikasi dengan lancar pada instance yang dipilih untuk penghentian. Ini adalah pendekatan upaya terbaik dan tidak dapat digunakan untuk mencegah penghentian jika tindakan siklus hidup penghentian ditinggalkan. Jika beban kerja Anda memiliki toleransi rendah untuk kegagalan tindakan siklus hidup penghentian, konfigurasikan kebijakan siklus hidup instans dalam kombinasi dengan kait siklus hidup penghentian Anda untuk mempertahankan instans.

Untuk menggunakan kait siklus hidup terminasi, Anda perlu mengetahui kapan instance dipilih untuk penghentian. Anda memiliki dua cara untuk mengetahui hal ini:

Opsi Deskripsi Paling baik digunakan untuk Tautan ke dokumentasi
Di dalam contoh Instance Metadata Service (IMDS) adalah titik akhir aman yang dapat Anda jajak pendapat untuk status instance langsung dari instans. Jika metadata muncul kembaliTerminated, maka instans Anda dijadwalkan untuk dihentikan. Aplikasi di mana Anda harus melakukan tindakan pada instance sebelum instance dihentikan. Mengambil status siklus hidup target
Di luar contoh Saat instance dihentikan, notifikasi peristiwa dihasilkan. Anda dapat membuat aturan menggunakan Amazon EventBridge, Amazon SQS, Amazon SNS, atau AWS Lambda untuk menangkap peristiwa ini, dan memanggil respons seperti dengan fungsi Lambda. Aplikasi yang perlu mengambil tindakan di luar instance. Mengkonfigurasi target notifikasi

Untuk menggunakan hook siklus hidup, Anda juga perlu mengetahui kapan instance Anda siap untuk dihentikan sepenuhnya. Amazon EC2 Auto Scaling tidak akan menghentikan instance sampai menerima panggilan CompleteLifecycleAction API atau batas waktu berlalu, mana saja yang terjadi lebih dulu.

Secara default, instance dapat terus berjalan selama satu jam (batas waktu detak jantung) karena kait siklus hidup penghentian. Anda dapat mengonfigurasi batas waktu default jika satu jam tidak cukup waktu untuk menyelesaikan tindakan siklus hidup. Saat tindakan siklus hidup sedang berlangsung, Anda dapat memperpanjang batas waktu dengan panggilan RecordLifecycleActionHeartbeat API.

Untuk informasi selengkapnya, lihat Hook siklus aktif Amazon EC2 Auto Scaling.

Proteksi penurunan skala instance

Anda dapat menggunakan perlindungan penskalaan instans untuk mengontrol instans mana yang dipilih untuk penghentian selama peristiwa scale-in, terutama untuk mencegah instans yang secara aktif memproses pekerjaan yang berjalan lama dihentikan. Misalnya, saat menjalankan beban kerja dalam wadah, biasanya ingin melindungi semua instans dan menghapus perlindungan hanya untuk instans tanpa tugas saat ini atau terjadwal. Instans dapat melanjutkan polling untuk pekerjaan baru dan mengaktifkan kembali perlindungan saat ada pekerjaan baru yang ditugaskan.

Anda dapat mengaktifkan perlindungan skala-in di tingkat grup dan tingkat instans Penskalaan Otomatis. Bila Anda mengaktifkan perlindungan skala-in di tingkat grup Penskalaan Otomatis, hanya instans baru yang dilindungi saat dibuat. Untuk instance yang ada, Anda dapat mengaktifkan perlindungan satu per satu.

Aplikasi dapat mengatur perlindungan baik dari instance itu sendiri, atau dari bidang kontrol terpusat yang mengelola apakah setiap instance dapat dihentikan. Kami merekomendasikan pendekatan terpusat untuk armada besar atau ketika perlindungan perlu sering dialihkan, karena memungkinkan Anda untuk melakukan panggilan batch ke SetInstanceProtection dan menghindari masalah pelambatan API.

Untuk informasi selengkapnya, lihat Gunakan perlindungan skala-in instans untuk mengontrol penghentian instans.

Kebijakan penghentian khusus

Seperti perlindungan penskalaan instans, kebijakan penghentian khusus membantu Anda mencegah grup Amazon EC2 Auto Scaling menghentikan instans EC2 tertentu. Instans yang tidak sehat masih dapat dihentikan terlepas dari kebijakan penghentian kustom Anda.

Grup Penskalaan Otomatis menggunakan kebijakan penghentian default untuk menentukan instans Amazon EC2 mana yang dihentikan terlebih dahulu. Jika Anda ingin lebih mengontrol instans mana yang diakhiri terlebih dahulu, Anda dapat menerapkan kebijakan penghentian khusus menggunakan fungsi Lambda. Auto Scaling memanggil fungsi ini setiap kali perlu memilih instance untuk penghentian, dan hanya akan menghentikan instance yang dikembalikan fungsi tersebut. Jika fungsi mengalami kesalahan, waktu habis, atau mengembalikan daftar kosong, Auto Scaling tidak menghentikan instance apa pun kecuali instansnya tidak sehat.

Kebijakan penghentian khusus berguna ketika aplikasi Anda dapat mengidentifikasi instans mana yang tidak aktif atau aman untuk dihentikan. Ini biasanya membutuhkan bidang kontrol yang melacak beban kerja di seluruh grup.

Untuk informasi selengkapnya, lihat Buat kebijakan pengakhiran kustom dengan Lambda.

Kebijakan siklus hidup instans

Kebijakan siklus hidup instans memberikan perlindungan terhadap penghentian Amazon EC2 Auto Scaling saat tindakan siklus hidup penghentian ditinggalkan. Tidak seperti hook siklus hidup saja, kebijakan siklus hidup instans dirancang untuk memastikan instans pindah ke status yang dipertahankan ketika prosedur shutdown yang lancar tidak berhasil diselesaikan.

Saat Auto Scaling memilih instance untuk penghentian, kait siklus hidup terminasi yang dikonfigurasi akan dipanggil dan aplikasi Anda memulai prosedur shutdown yang lancar. Jika tindakan siklus hidup penghentian berhasil diselesaikanCONTINUE, instans akan berakhir secara normal. Namun, jika tindakan siklus hidup penghentian ditinggalkan karena alasan apa pun, kebijakan siklus hidup instans memindahkan instance ke status yang dipertahankan alih-alih mengakhirinya. Instans yang dipertahankan tidak dihitung dalam kapasitas grup Penskalaan Otomatis yang diinginkan, sehingga instans pengganti diluncurkan secara otomatis. Anda akan dikenakan biaya Amazon EC2 standar untuk instans yang dipertahankan dan penggantiannya hingga Anda menghentikan instans yang dipertahankan secara manual menggunakan API. TerminateInstanceInAutoScalingGroup

Untuk menggunakan fitur ini, Anda harus mengonfigurasi kebijakan siklus hidup instans dengan pemicu TerminateHookAbandon retensi disetel keretain, serta setidaknya satu kait siklus hidup penghentian. Karena instans yang dipertahankan dikenakan biaya Amazon EC2 yang berkelanjutan dan memerlukan tindakan manual, pemantauan sangat penting. Anda harus mengaktifkan CloudWatch metrik seperti GroupTerminatingRetainedInstances dan membuat CloudWatch alarm untuk mengingatkan Anda saat instans memasuki status yang dipertahankan.

Untuk informasi selengkapnya, lihat Kontrol retensi instans dengan kebijakan siklus hidup instans.

Tangguhkan penghentian sama sekali

Jika Anda memerlukan kontrol penuh atas semua penghentian instans EC2 dalam grup Amazon EC2 Auto Scaling Anda, tunda prosesnya. Terminate Kami hanya merekomendasikan menggunakan opsi ini jika opsi di atas tidak menawarkan kontrol yang Anda butuhkan untuk layanan Anda. Dengan memanggil SuspendProcesses untuk menangguhkan Terminate proses, Anda mencegah Auto Scaling mencoba penghentian dengan alasan apa pun, kecuali yang diprakarsai oleh permintaan pengguna ke TerminateInstanceInAutoScalingGroup API.

Untuk informasi selengkapnya, lihat Menangguhkan dan melanjutkan proses Penskalaan Otomatis Amazon EC2.

Batasan

penting

Saat mendesain aplikasi Anda di Amazon EC2 Auto Scaling untuk menangani penghentian instans dengan anggun, ingatlah batasan berikut.

Instans yang tidak sehat melewati beberapa perlindungan

Jika instans tidak sehat, Amazon EC2 Auto Scaling akan mulai menghentikannya meskipun Anda memiliki kebijakan penghentian khusus atau perlindungan skala-in. Satu-satunya cara untuk mencegah penggantian instans yang tidak sehat dengan Penskalaan Otomatis adalah dengan menangguhkan HealthCheckReplaceUnhealthy,, atau Terminate proses. Anda dapat menggunakan kait siklus hidup dan kebijakan siklus hidup instans untuk memungkinkan aplikasi dimatikan dengan lancar atau menyalin data apa pun yang perlu Anda pulihkan sebelum instance yang tidak sehat dihentikan.

Fitur Mengontrol instans yang sehat Mengontrol contoh yang tidak sehat
Kebijakan penghentian khusus Ya Tidak
Scale-in perlindungan Ya Tidak
Menangguhkan HealthCheckReplaceUnhealthy,, atau mem Terminate proses Ya Ya
Pengait siklus hidup Ya Ya
Kebijakan siklus hidup instans Ya Ya

Pengait siklus hidup saja tidak menjamin shutdown yang anggun

Secara default, kait siklus hidup penghentian beroperasi berdasarkan upaya terbaik. Jika tindakan siklus hidup penghentian ditinggalkan, Amazon EC2 Auto Scaling akan segera menghentikan instans. Anda dapat menggabungkan kait siklus hidup penghentian dengan kebijakan siklus hidup instans untuk mempertahankan instans saat tindakan siklus hidup penghentian ditinggalkan. Dengan kombinasi ini:

  • Pengait siklus hidup penghentian Anda mencoba mematikan aplikasi Anda dengan lancar setelah Auto Scaling memicu penghentian instans dan pengurasan dari penyeimbang beban Elastic Load Balancing yang dikonfigurasi selesai.

  • Jika tindakan siklus hidup penghentian ditinggalkan karena alasan apa pun, instance akan pindah ke status yang dipertahankan alih-alih dihentikan.

  • Instans yang dipertahankan tetap dalam status Amazon EC2 saat ini, memungkinkan Anda menyelesaikan prosedur shutdown secara manual atau menyelidiki kegagalan.

  • Anda dapat menghentikan instans yang dipertahankan secara manual dengan memanggil TerminateInstanceInAutoScalingGroup API setelah menyelesaikan tindakan yang diperlukan.

Untuk informasi selengkapnya, lihat Kontrol retensi instans dengan kebijakan siklus hidup instans.

Opsi pasar instans tertentu dapat terganggu dengan pemberitahuan terbatas

Jika Anda menggunakan opsi pasar instans seperti Instans Spot dan reservasi kapasitas yang dapat diinterupsi di grup Penskalaan Otomatis, Amazon EC2 dapat mengganggu dan mengklaim kembali instans Anda kapan saja. Interupsi ini melewati semua mekanisme perlindungan Amazon EC2 Auto Scaling, termasuk:

  • Kait siklus hidup penghentian

  • Proteksi penurunan skala instance

  • Kebijakan penghentian khusus

  • Kebijakan siklus hidup instans

  • Proses yang ditangguhkan

Saat Instans Spot menerima pemberitahuan gangguan, Anda memiliki waktu sekitar dua menit untuk melakukan tugas shutdown yang lancar. Meskipun Anda dapat menggunakan kait siklus hidup penghentian untuk merespons interupsi Instans Spot, instans akan dihentikan secara paksa pada akhir jendela dua menit, meskipun kait siklus hidup masih berlangsung. Kebijakan siklus hidup instans juga tidak dapat mencegah gangguan Instans Spot.

Untuk informasi selengkapnya tentang penanganan interupsi Instans Spot, lihat Interupsi Instans Spot dan Praktik Terbaik untuk Amazon EC2 Spot di Panduan Pengguna Amazon EC2.

Pengakhiran Amazon EC2 langsung melewati semua perlindungan

Jika Anda menghentikan instans di grup Penskalaan Otomatis dengan Amazon EC2 TerminateInstances API secara langsung, penghentian akan melewati semua mekanisme perlindungan Penskalaan Otomatis Amazon EC2.

Untuk menghentikan instans di grup Penskalaan Otomatis sambil menghormati perlindungan yang dikonfigurasi, gunakan TerminateInstanceInAutoScalingGroup API sebagai gantinya.

Contoh alur perencanaan

Saat menggunakan Amazon EC2 Auto Scaling, Anda dapat memilih berapa banyak manajemen armada yang ditangani Auto Scaling atas nama Anda dibandingkan seberapa banyak kontrol langsung yang Anda pertahankan atas keputusan penghentian instans EC2. Semakin sensitif beban kerja Anda terhadap penghentian instance, semakin banyak kontrol yang mungkin ingin Anda pertahankan. Contoh berikut menjelaskan beban kerja dengan tingkat toleransi yang berbeda dan konfigurasi yang disarankan:

Contoh 1: Node database terdistribusi (toleransi rendah)

Anda menjalankan database terdistribusi di mana setiap instance EC2 menyimpan partisi data Anda dengan faktor replikasi 3. Kehilangan beberapa instance yang menyimpan replika partisi yang sama dapat menyebabkan hilangnya data atau membuat partisi itu tidak tersedia.

Tantangan: Penskalaan Otomatis mungkin menghentikan instans lebih cepat daripada data yang dapat direplikasi ulang ke node lain, dan penghentian mungkin mengurangi kapasitas Anda di bawah apa yang diperlukan untuk mempertahankan faktor replikasi Anda.

Pertimbangkan konfigurasi berikut:

  • Aktif kan perlindungan skala instans pada semua instans database; hapus secara terprogram hanya setelah mengonfirmasi bahwa data direplikasi dengan aman di tempat lain.

  • Konfigurasikan kait siklus hidup penghentian dengan batas waktu yang diperpanjang dalam kombinasi dengan kebijakan siklus hidup instans untuk memungkinkan transfer data selesai.

  • Tetapkan kebijakan pemeliharaan instans dengan persentase sehat minimum 100% untuk mempertahankan kapasitas yang Anda butuhkan.

Contoh 2: pemrosesan Long-running pekerjaan (Toleransi sedang)

Anda memiliki antrian Amazon SQS yang mengumpulkan pesan masuk untuk pekerjaan yang berjalan lama. Ketika pesan baru tiba, instance EC2 mengambil pesan dan memulai pekerjaan yang membutuhkan waktu 3 jam untuk diproses. Seiring bertambahnya antrian, Penskalaan Otomatis menambahkan instance berdasarkan kebijakan penskalaan Anda. Saat antrian menyusut, Auto Scaling mengakhiri instance.

Tant angan: Penskalaan Otomatis mungkin menghentikan instance yang selama 3 jam memproses pekerjaan, bukan instans idle. Pekerjaan dapat dimulai ulang pada instance lain, tetapi Anda kehilangan kemajuan yang signifikan.

Pertimbangkan konfigurasi berikut:

  • Konfigurasikan kebijakan penghentian khusus yang memprioritaskan penghentian instans idle terlebih dahulu.

  • Gunakan kait siklus hidup penghentian untuk memungkinkan pekerjaan yang sedang berjalan diselesaikan.

  • Akti fkan perlindungan skala-in inst ans secara terprogram saat instance memulai pekerjaan, dan menghapusnya saat pekerjaan selesai.

Contoh 3: Armada pekerja untuk lingkungan pengujian (toleransi tinggi)

Anda menjalankan armada instans EC2 yang menjalankan pengujian otomatis, pekerjaan CI/CD pipeline, atau beban kerja pengembangan. Instans pekerja ini menarik tugas dari antrian, dan hasil pengujian dapat dibuat ulang jika pekerjaan gagal.

Tantangan: Pekerjaan pengujian mungkin terganggu selama peristiwa scale-in, tetapi karena pengujian dapat dicoba ulang tanpa dampak, Anda ingin mengoptimalkan biaya dan kesederhanaan daripada ketersediaan tanpa gangguan.

Pertimbangkan konfigurasi berikut:

  • Gunakan kait siklus hidup penghentian untuk memungkinkan permintaan dalam penerbangan diselesaikan.

  • Pertimbangkan untuk menggunakan Inst ans Spot dengan strategi alokasi kapasitas yang dioptimalkan untuk mengurangi biaya lebih lanjut.