View a markdown version of this page

Buat kebijakan pengakhiran kustom dengan Lambda - Amazon EC2 Auto Scaling

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

Buat kebijakan pengakhiran kustom dengan Lambda

Amazon EC2 Auto Scaling menggunakan kebijakan penghentian untuk memprioritaskan instans mana yang harus dihentikan terlebih dahulu saat mengurangi ukuran grup Penskalaan Otomatis Anda (disebut sebagai penskalaan di). Grup Penskalaan Otomatis menggunakan kebijakan penghentian default, tetapi Anda dapat memilih atau membuat kebijakan penghentian sendiri secara opsional. Untuk informasi selengkapnya tentang memilih kebijakan penghentian yang telah ditentukan sebelumnya, lihatKonfigurasikan kebijakan penghentian untuk Amazon EC2 Auto Scaling.

Dalam topik ini, Anda mempelajari cara membuat kebijakan penghentian khusus menggunakan AWS Lambda fungsi yang dipanggil Amazon EC2 Auto Scaling sebagai respons terhadap peristiwa tertentu. Fungsi Lambda yang Anda buat memproses informasi dalam data input yang dikirim oleh Amazon EC2 Auto Scaling dan mengembalikan daftar instance yang siap dihentikan.

Kebijakan penghentian khusus memberikan kontrol yang lebih baik atas instans mana yang dihentikan, dan kapan. Misalnya, saat grup Auto Scaling Anda masuk, Amazon EC2 Auto Scaling tidak dapat menentukan apakah ada beban kerja yang berjalan yang tidak boleh terganggu. Dengan fungsi Lambda, Anda dapat memvalidasi permintaan penghentian dan menunggu hingga beban kerja selesai sebelum mengembalikan ID instans ke Amazon EC2 Auto Scaling untuk penghentian.

Data input

Amazon EC2 Auto Scaling menghasilkan payload JSON untuk skala dalam acara, dan juga melakukannya ketika instans akan dihentikan sebagai akibat dari masa pakai instans maksimum atau fitur penyegaran instans. Ini juga menghasilkan muatan JSON untuk skala dalam acara yang dapat dimulai saat menyeimbangkan ulang grup Anda di Zona Ketersediaan.

Payload ini berisi informasi tentang kapasitas Amazon EC2 Auto Scaling yang perlu dihentikan, daftar instans yang disarankan untuk penghentian, dan peristiwa yang memulai penghentian.

Berikut ini adalah contoh payload:

{ "AutoScalingGroupARN": "arn:aws:autoscaling:us-east-1:<account-id>:autoScalingGroup:d4738357-2d40-4038-ae7e-b00ae0227003:autoScalingGroupName/my-asg", "AutoScalingGroupName": "my-asg", "CapacityToTerminate": [ { "AvailabilityZone": "us-east-1b", "Capacity": 2, "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1b", "Capacity": 1, "InstanceMarketOption": "spot" }, { "AvailabilityZone": "us-east-1c", "Capacity": 3, "InstanceMarketOption": "on-demand" } ], "Instances": [ { "AvailabilityZone": "us-east-1b", "InstanceId": "i-0056faf8da3e1f75d", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1c", "InstanceId": "i-02e1c69383a3ed501", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1c", "InstanceId": "i-036bc44b6092c01c7", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, ... ], "Cause": "SCALE_IN" }

Payload mencakup nama grup Auto Scaling, Amazon Resource Name (ARN), dan elemen-elemen berikut:

  • CapacityToTerminatemenjelaskan berapa banyak Spot atau On-Demand kapasitas Anda yang disetel untuk dihentikan di Zona Ketersediaan tertentu.

  • Instancesmewakili contoh yang disarankan Amazon EC2 Auto Scaling untuk penghentian berdasarkan informasi di CapacityToTerminate dalamnya.

  • Causemenjelaskan peristiwa yang menyebabkan penghentian:SCALE_IN,INSTANCE_REFRESH,MAX_INSTANCE_LIFETIME, atauREBALANCE.

Informasi berikut menguraikan faktor-faktor paling signifikan dalam bagaimana Amazon EC2 Auto Scaling Instances menghasilkan data input:

  • Mempertahankan keseimbangan di seluruh Zona Ketersediaan diutamakan saat instance dihentikan karena skala dalam peristiwa dan penghentian berbasis penyegaran instans. Oleh karena itu, jika satu Zona Ketersediaan memiliki lebih banyak instans daripada Zona Ketersediaan lain yang digunakan oleh grup, data input berisi instans yang memenuhi syarat untuk penghentian hanya dari Zona Ketersediaan yang tidak seimbang. Jika Zona Ketersediaan yang digunakan oleh grup seimbang, data input berisi instance dari semua Zona Ketersediaan untuk grup.

  • Saat menggunakan kebijakan instance campuran, menjaga keseimbangan Spot dan On-Demand kapasitas berdasarkan persentase yang Anda inginkan untuk setiap opsi pembelian juga diutamakan. Pertama-tama kami mengidentifikasi mana dari dua jenis (Spot atau On-Demand) yang harus dihentikan. Kami kemudian mengidentifikasi instans mana (dalam opsi pembelian yang diidentifikasi) di mana Zona Ketersediaan yang dapat kami akhiri yang akan mengakibatkan Zona Ketersediaan menjadi paling seimbang.

Data tanggapan

Data input dan data respons bekerja sama untuk mempersempit daftar instance yang akan dihentikan.

Dengan input yang diberikan, respons dari fungsi Lambda Anda akan terlihat seperti contoh berikut:

{ "InstanceIDs": [ "i-02e1c69383a3ed501", "i-036bc44b6092c01c7", ... ] }

InstanceIDsDalam tanggapan mewakili contoh yang siap untuk diakhiri.

Atau, Anda dapat mengembalikan kumpulan instance berbeda yang siap dihentikan, yang menggantikan instance dalam data input. Jika tidak ada instance yang siap untuk dihentikan saat fungsi Lambda dipanggil, Anda juga dapat memilih untuk tidak mengembalikan instance apa pun.

Ketika tidak ada instance yang siap untuk dihentikan, respons dari fungsi Lambda Anda akan terlihat seperti contoh berikut:

{ "InstanceIDs": [ ] }

Pertimbangan-pertimbangan

Perhatikan pertimbangan berikut saat menggunakan kebijakan penghentian khusus:

  • Mengembalikan instance terlebih dahulu dalam data respons tidak menjamin penghentiannya. Jika lebih dari jumlah instans yang diperlukan dikembalikan saat fungsi Lambda dipanggil, Amazon EC2 Auto Scaling mengevaluasi setiap instans terhadap kebijakan penghentian lain yang Anda tentukan untuk grup Penskalaan Otomatis. Ketika ada beberapa kebijakan penghentian, ia mencoba menerapkan kebijakan penghentian berikutnya dalam daftar, dan jika ada lebih banyak instans daripada yang diperlukan untuk mengakhiri, kebijakan penghentian berikutnya akan beralih ke kebijakan penghentian berikutnya, dan seterusnya. Jika tidak ada kebijakan penghentian lain yang ditentukan, kebijakan penghentian default digunakan untuk menentukan instans mana yang akan dihentikan.

  • Jika tidak ada instans yang dikembalikan atau fungsi Lambda Anda habis waktu, maka Amazon EC2 Auto Scaling akan menunggu beberapa saat sebelum menjalankan fungsi Anda lagi. Untuk skala apa pun, ia terus berusaha selama kapasitas yang diinginkan grup kurang dari kapasitasnya saat ini. Misalnya penghentian berbasis penyegaran, terus mencoba selama satu jam. Setelah itu, jika terus gagal untuk menghentikan instance apa pun, operasi penyegaran instance gagal. Dengan masa pakai instans maksimum, Amazon EC2 Auto Scaling terus mencoba menghentikan instans yang diidentifikasi melebihi masa pakai maksimumnya.

  • Karena fungsi Anda dicoba ulang berulang kali, pastikan untuk menguji dan memperbaiki kesalahan permanen dalam kode Anda sebelum menggunakan fungsi Lambda sebagai kebijakan penghentian khusus.

  • Jika Anda mengganti data input dengan daftar instans Anda sendiri yang akan dihentikan, dan menghentikan instans ini membuat Zona Ketersediaan tidak seimbang, Amazon EC2 Auto Scaling secara bertahap menyeimbangkan distribusi kapasitas di seluruh Availability Zone. Pertama, ia memanggil fungsi Lambda Anda untuk melihat apakah ada instance yang siap dihentikan sehingga dapat menentukan apakah akan memulai penyeimbangan ulang. Jika ada instans yang siap dihentikan, instans baru akan diluncurkan terlebih dahulu. Ketika instans selesai diluncurkan, instans kemudian mendeteksi bahwa kapasitas grup Anda saat ini lebih tinggi dari kapasitas yang diinginkan dan memulai skala jika terjadi.

  • Kebijakan penghentian khusus tidak memengaruhi kemampuan Anda untuk juga menggunakan skala dalam perlindungan untuk melindungi instans tertentu agar tidak dihentikan. Untuk informasi selengkapnya, lihat Gunakan perlindungan skala-in instans untuk mengontrol penghentian instans.

  • Jika fungsi Lambda Anda tidak mengembalikan instance, ini tidak secara otomatis mencegah semua penghentian. Amazon EC2 Auto Scaling masih akan menghentikan instans yang dianggap tidak sehat oleh pemeriksaan kesehatan Auto Scaling, terlepas dari kebijakan penghentian.

Buat fungsi Lambda

Mulailah dengan membuat fungsi Lambda, sehingga Anda dapat menentukan Nama Sumber Daya Amazon (ARN) di kebijakan penghentian untuk grup Penskalaan Otomatis Anda.

Untuk membuat fungsi Lambda (konsol)
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pada bilah navigasi di bagian atas layar, pilih Wilayah yang sama yang Anda gunakan saat membuat grup Penskalaan Otomatis.

  3. Pilih fungsi Buat, Penulis dari awal.

  4. Di bawah Informasi dasar, untuk Nama fungsi, masukkan nama fungsi Anda.

  5. Pilih Buat fungsi. Anda dikembalikan ke kode fungsi dan konfigurasi.

  6. Dengan fungsi Anda masih terbuka di konsol, di bawah Kode fungsi, tempel kode Anda ke editor.

  7. Pilih Deploy.

  8. Secara opsional, buat versi yang diterbitkan dari fungsi Lambda dengan memilih tab Versi dan kemudian Publikasikan versi baru. Untuk mempelajari selengkapnya tentang pembuatan versi di Lambda, lihat versi fungsi Lambda di Panduan Peng AWS Lambda embang.

  9. Jika Anda memilih untuk menerbitkan versi, pilih tab Alias jika Anda ingin mengaitkan alias dengan versi fungsi Lambda ini. Untuk mempelajari lebih lanjut tentang alias di Lambda, lihat Alias fungsi Lambda di Panduan Pengembang AWS Lambda

  10. Selanjutnya, pilih tab Konfigurasi dan kemudian Izin.

  11. Gulir ke bawah ke Resource-based kebijakan, lalu pilih Tambahkan izin. Kebijakan berbasis sumber daya digunakan untuk memberikan izin untuk memanggil fungsi Anda ke prinsipal yang ditentukan dalam kebijakan. Dalam hal ini, prinsipalnya adalah peran terkait layanan Amazon EC2 Auto Scaling yang terkait dengan grup Auto Scaling.

  12. Di bagian pernyataan kebijakan, konfigurasikan izin Anda:

    1. Pilih Akun AWS.

    2. Untuk Principal, masukkan ARN dari peran tertaut layanan panggilan, misalnya,. arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

    3. Untuk T ind akan, pilih lambda: InvokeFunction.

    4. Untuk ID Per nyataan, masukkan ID pernyataan unik, sepertiAllowInvokeByAutoScaling.

    5. Pilih Simpan.

  13. Setelah Anda mengikuti instruksi ini, lanjutkan untuk menentukan ARN fungsi Anda dalam kebijakan penghentian untuk grup Penskalaan Otomatis Anda sebagai langkah selanjutnya. Untuk informasi selengkapnya, lihat Mengubah kebijakan penghentian untuk grup Penskalaan Otomatis.

catatan

Untuk contoh yang dapat Anda gunakan sebagai referensi untuk mengembangkan fungsi Lambda Anda, lihat GitHub repositori untuk Amazon EC2 Auto Scaling.

Batasan

  • Anda hanya dapat menentukan satu fungsi Lambda dalam kebijakan penghentian untuk grup Penskalaan Otomatis. Jika ada beberapa kebijakan penghentian yang ditentukan, fungsi Lambda harus ditentukan terlebih dahulu.

  • Anda dapat mereferensikan fungsi Lambda Anda menggunakan ARN yang tidak memenuhi syarat (tanpa akhiran) atau ARN yang memenuhi syarat yang memiliki versi atau alias sebagai akhirannya. Jika ARN yang tidak memenuhi syarat digunakan (misalnya,function:my-function), kebijakan berbasis sumber daya Anda harus dibuat pada versi fungsi yang tidak dipublikasikan. Jika ARN yang memenuhi syarat digunakan (misalnya, function:my-function:1 ataufunction:my-function:prod), kebijakan berbasis sumber daya Anda harus dibuat pada versi fungsi yang dipublikasikan tertentu.

  • Anda tidak dapat menggunakan ARN yang memenuhi syarat dengan akh $LATEST iran. Jika Anda mencoba menambahkan kebijakan penghentian khusus yang mengacu pada ARN yang memenuhi syarat dengan $LATEST akhiran, itu akan mengakibatkan kesalahan.

  • Jumlah instance yang disediakan dalam data input dibatasi hingga 30.000 instance. Jika ada lebih dari 30.000 instance yang dapat dihentikan, data input termasuk "HasMoreInstances": true untuk menunjukkan bahwa jumlah maksimum instance dikembalikan.

  • Waktu berjalan maksimum untuk fungsi Lambda Anda adalah dua detik (2000 milidetik). Sebagai praktik terbaik, Anda harus mengatur nilai batas waktu fungsi Lambda Anda berdasarkan waktu berjalan yang diharapkan. Fungsi lambda memiliki batas waktu default tiga detik, tetapi ini dapat dikurangi.

  • Jika runtime Anda melebihi batas 2 detik, skala apa pun yang sedang beraksi akan ditunda sampai runtime jatuh di bawah ambang batas ini. Untuk fungsi Lambda dengan runtime yang lebih lama secara konsisten, temukan cara untuk mengurangi runtime, seperti dengan menyimpan hasil di mana mereka dapat diambil selama pemanggilan Lambda berikutnya.

  • Cross-account Fungsi lambda tidak didukung. Fungsi Lambda yang digunakan sebagai kebijakan terminasi khusus harus Akun AWS sama dengan grup Auto Scaling. Petunjuk penyiapan di halaman ini secara khusus berfokus pada konfigurasi akun yang sama.

  • Kebijakan penghentian khusus tidak berlaku untuk instans yang tidak sehat. Instans yang tidak sehat selalu dianggap memenuhi syarat untuk penghentian, dan fungsi Lambda hanya mengevaluasi urutan penghentian untuk instans yang tersisa.