Membuat kebijakan penghentian kustom dengan Lambda - EC2Auto Scaling Amazon

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

Membuat kebijakan penghentian kustom dengan Lambda

EC2Auto Scaling Amazon menggunakan kebijakan penghentian untuk memprioritaskan instance mana yang akan dihentikan terlebih dahulu saat mengurangi ukuran grup Auto Scaling Anda (disebut sebagai penskalaan dalam). Grup Auto Scaling Anda 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, lihatMengonfigurasi kebijakan penghentian untuk EC2 Auto Scaling Amazon.

Dalam topik ini, Anda mempelajari cara membuat kebijakan penghentian kustom 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 menampilkan daftar instance yang siap dihentikan.

Kebijakan penghentian kustom memberikan kontrol yang lebih baik atas instance mana yang dihentikan, dan kapan. Misalnya, saat grup Auto Scaling Anda masuk, Amazon Auto EC2 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 Auto Scaling EC2 untuk penghentian.

Data input

EC2Auto Scaling Amazon menghasilkan JSON payload untuk skala dalam peristiwa, dan juga melakukannya saat instance akan dihentikan sebagai akibat dari masa pakai instans maksimum atau fitur penyegaran instans. Ini juga menghasilkan JSON payload untuk skala dalam peristiwa yang dapat dimulai saat menyeimbangkan kembali grup Anda di seluruh Availability Zone.

Payload ini berisi informasi tentang kapasitas yang diperlukan Amazon EC2 Auto Scaling untuk dihentikan, daftar instance 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 kapasitas Spot atau Sesuai Permintaan Anda yang ditetapkan untuk dihentikan di Availability Zone tertentu.

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

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

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

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

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

Data respons

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 respon mewakili contoh yang siap untuk dihentikan.

Atau, Anda dapat mengembalikan serangkaian instance berbeda yang siap untuk dihentikan, yang mengesampingkan instance dalam data input. Jika tidak ada instance yang siap dihentikan saat fungsi Lambda Anda 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

Perhatikan pertimbangan berikut saat menggunakan kebijakan penghentian kustom:

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

  • Jika tidak ada instance yang dikembalikan atau fungsi Lambda Anda habis, maka Amazon Auto EC2 Scaling menunggu beberapa saat sebelum menjalankan fungsi Anda lagi. Untuk skala apa pun, ia terus berusaha selama kapasitas yang diinginkan grup kurang dari kapasitas saat ini. Misalnya penghentian berbasis refresh, ia 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 instance yang diidentifikasi melebihi masa pakai maksimumnya.

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

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

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

Buat fungsi Lambda

Mulailah dengan membuat fungsi Lambda, sehingga Anda dapat menentukan Nama Sumber Daya Amazon (ARN) dalam kebijakan penghentian untuk grup Auto Scaling 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 dengan yang Anda gunakan saat membuat grup Auto Scaling.

  3. Pilih Create function, Author dari awal.

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

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

  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 lebih lanjut tentang pembuatan versi di Lambda, lihat Versi fungsi Lambda di Panduan Pengembang.AWS Lambda

  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 kebijakan berbasis sumber daya, lalu pilih Tambahkan izin. Kebijakan berbasis sumber daya digunakan untuk memberikan izin untuk menjalankan fungsi Anda ke prinsipal yang ditentukan dalam kebijakan. Dalam hal ini, prinsipnya 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 peran terkait layanan panggilan, misalnya,. ARN arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

    3. Untuk Tindakan, pilih lambda: InvokeFunction.

    4. Untuk ID Pernyataan, masukkan ID pernyataan unik, sepertiAllowInvokeByAutoScaling.

    5. Pilih Simpan.

  13. Setelah Anda mengikuti petunjuk ini, lanjutkan untuk menentukan fungsi Anda dalam kebijakan penghentian untuk grup Auto Scaling Anda sebagai langkah berikutnya. ARN Untuk informasi selengkapnya, lihat Mengubah kebijakan penghentian untuk grup Auto Scaling.

catatan

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

Batasan

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

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

  • Anda tidak dapat menggunakan kualifikasi ARN dengan $LATEST akhiran. Jika Anda mencoba menambahkan kebijakan penghentian kustom yang mengacu pada kualifikasi ARN dengan $LATEST akhiran, itu akan menghasilkan kesalahan.

  • Jumlah instans 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 menetapkan nilai batas waktu fungsi Lambda Anda berdasarkan waktu berjalan yang Anda harapkan. 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 ditahan hingga runtime turun 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.