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 Auto Scaling Amazon EC2 menghentikan instans Amazon EC2 yang belum siap untuk dihentikan. Secara default, Auto Scaling tidak memiliki visibilitas ke dalam aplikasi yang berjalan pada instans Anda. Ini dapat menghentikan instance sebelum aplikasi Anda dapat dengan anggun mematikan atau menyelesaikan pekerjaan yang ditugaskan. Fitur-fitur ini memberi waktu aplikasi Anda untuk menyelesaikan pekerjaan yang sedang berlangsung, mentransfer status, atau melakukan pembersihan sebelum penghentian instans. Anda dapat menggunakannya secara individual atau dalam kombinasi tergantung pada kebutuhan aplikasi Anda.

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

Kait siklus hidup penghentian

Pengait siklus hidup penghentian memperpanjang masa pakai instans Amazon EC2 Anda yang telah 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, pengait siklus hidup penghentian mungkin cukup untuk mematikan aplikasi dengan anggun 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 yang rendah terhadap kegagalan tindakan siklus hidup penghentian, konfigurasikan kebijakan siklus hidup instans yang dikombinasikan dengan kait siklus hidup penghentian untuk mempertahankan instans.

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

Opsi Deskripsi Paling baik digunakan untuk Tautan ke dokumentasi
Di dalam instance Layanan Metadata Instance (IMDS) adalah titik akhir aman yang dapat Anda polling untuk status instance langsung dari instance. Jika metadata kembali denganTerminated, maka instance Anda dijadwalkan untuk dihentikan. Aplikasi di mana Anda harus melakukan tindakan pada instance sebelum instance dihentikan. Mengambil status siklus hidup target
Di luar contoh Ketika sebuah instance berakhir, pemberitahuan acara dihasilkan. Anda dapat membuat aturan menggunakan Amazon EventBridge, Amazon SQS, Amazon SNS, AWS Lambda atau untuk menangkap peristiwa ini, dan memanggil respons seperti dengan fungsi Lambda. Aplikasi yang perlu mengambil tindakan di luar instance. Konfigurasikan target notifikasi

Untuk menggunakan kait siklus hidup, Anda juga perlu tahu kapan instance Anda siap untuk dihentikan sepenuhnya. Auto Scaling Amazon EC2 tidak akan menghentikan instance hingga instans menerima CompleteLifecycleActionpanggilan API atau batas waktu berlalu, mana saja yang terjadi lebih dulu.

Secara default, sebuah instance dapat terus berjalan selama satu jam (batas waktu detak jantung) karena pengait 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 RecordLifecycleActionHeartbeatpanggilan API.

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

Proteksi penurunan skala instance

Anda dapat menggunakan perlindungan skala dalam instance untuk mengontrol instance mana yang dipilih untuk penghentian selama peristiwa scale-in, terutama untuk mencegah instance yang secara aktif memproses pekerjaan yang berjalan lama agar tidak dihentikan. Misalnya, saat menjalankan beban kerja kontainer, biasanya ingin melindungi semua instance dan menghapus perlindungan hanya untuk instance tanpa tugas saat ini atau yang dijadwalkan. Instans dapat melanjutkan pemungutan suara untuk pekerjaan baru dan mengaktifkan kembali perlindungan ketika ada pekerjaan baru yang ditugaskan.

Anda dapat mengaktifkan perlindungan scale-in di tingkat grup Auto Scaling dan tingkat instans. Saat Anda mengaktifkan perlindungan scale-in di tingkat grup Auto Scaling, hanya instance baru yang dilindungi saat dibuat. Untuk contoh 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 diaktifkan, karena memungkinkan Anda untuk melakukan panggilan batch SetInstanceProtectiondan menghindari masalah pelambatan API.

Untuk informasi selengkapnya, lihat Gunakan perlindungan skala dalam instance untuk mengontrol penghentian instans.

Kebijakan penghentian kustom

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

Grup Auto Scaling Anda menggunakan kebijakan penghentian default untuk menentukan instans Amazon EC2 yang dihentikan terlebih dahulu. Jika ingin lebih mengontrol instance mana yang dihentikan terlebih dahulu, Anda dapat menerapkan kebijakan penghentian kustom 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 kesalahan, waktu habis, atau mengembalikan daftar kosong, Auto Scaling tidak menghentikan instance apa pun kecuali instans tidak sehat.

Kebijakan penghentian kustom berguna ketika aplikasi Anda dapat mengidentifikasi instance mana yang tidak digunakan 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 Auto Scaling Amazon EC2 saat tindakan siklus hidup penghentian ditinggalkan. Tidak seperti kait siklus hidup saja, kebijakan siklus hidup instance dirancang untuk memastikan bahwa instance berpindah ke status tertahan saat prosedur shutdown yang anggun tidak berhasil diselesaikan.

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

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

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

Tangguhkan penghentian sama sekali

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

Untuk informasi selengkapnya, lihat Menangguhkan dan melanjutkan proses Auto Scaling Amazon EC2.

Batasan

penting

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

Contoh yang tidak sehat melewati beberapa perlindungan

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

Fitur Mengontrol contoh yang sehat Mengontrol contoh yang tidak sehat
Kebijakan penghentian kustom Ya Tidak
Perlindungan pengurangan skala Ya Tidak
MenangguhkanHealthCheck,ReplaceUnhealthy, atau memproses Terminate Ya Ya
Pengait siklus hidup Ya Ya
Kebijakan siklus hidup instans Ya Ya

Kait siklus hidup saja tidak menjamin shutdown yang anggun

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

  • Hook siklus hidup terminasi Anda mencoba mematikan aplikasi Anda dengan baik 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 berpindah ke status dipertahankan alih-alih dihentikan.

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

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

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

Opsi pasar contoh tertentu dapat terganggu dengan pemberitahuan terbatas

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

  • Kait siklus hidup penghentian

  • Proteksi penurunan skala instance

  • Kebijakan penghentian kustom

  • Kebijakan siklus hidup instans

  • Proses yang ditangguhkan

Saat Instans Spot menerima pemberitahuan interupsi, Anda memiliki waktu sekitar dua menit untuk melakukan tugas shutdown yang anggun. Meskipun Anda dapat menggunakan kait siklus hidup terminasi untuk merespons interupsi Instans Spot, instance akan dihentikan secara paksa di akhir jendela dua menit, meskipun pengait siklus hidup masih dalam proses. Kebijakan siklus hidup instans juga tidak dapat mencegah interupsi Instans Spot.

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

Pengakhiran Amazon EC2 langsung melewati semua perlindungan

Jika Anda menghentikan instans di grup Auto Scaling dengan Amazon TerminateInstancesEC2 API secara langsung, penghentian akan melewati semua mekanisme perlindungan Auto Scaling Amazon EC2.

Untuk menghentikan instance di grup Auto Scaling sambil menghormati perlindungan yang dikonfigurasi, gunakan API sebagai gantinya. TerminateInstanceInAutoScalingGroup

Contoh alur perencanaan

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

Contoh 1: Node database terdistribusi (Toleransi rendah)

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

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

Pertimbangkan konfigurasi berikut:

  • Aktifkan perlindungan skala masuk instance pada semua instance database; hapus secara terprogram hanya setelah mengonfirmasi data direplikasi dengan aman di tempat lain.

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

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

Contoh 2: Pemrosesan pekerjaan yang berjalan lama (Toleransi sedang)

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

Tantangan: Auto Scaling dapat menghentikan instance yang 3 jam untuk memproses pekerjaan daripada instance idle. Pekerjaan dapat dimulai kembali pada contoh lain, tetapi Anda kehilangan kemajuan yang signifikan.

Pertimbangkan konfigurasi berikut:

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. Instance pekerja ini menarik tugas dari antrian, dan hasil pengujian dapat dibuat ulang jika pekerjaan gagal.

Tantangan: Pekerjaan pengujian mungkin terganggu selama acara skala dalam, 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 Instans Spot dengan strategi alokasi yang dioptimalkan kapasitas untuk mengurangi biaya lebih lanjut.