Bagaimana saya bisa secara otomatis menggilir gambar baru di AWS Auto Scaling Group?

21

Saya memiliki pengaturan aplikasi web dengan penyeimbang beban dan grup penskalaan otomatis untuk mengelola penskalaan. Kode sumber ada di repositori git jadi saya tidak perlu memperbarui gambar ketika kode berubah, tetapi kadang-kadang lingkungan berubah sehingga kami membuat gambar baru. Maka gambar itu perlu didaur ulang ke dalam grup penskalaan otomatis.

Apakah ada cara untuk menggilir gambar secara otomatis? Saat ini saya menjadwalkan tindakan peningkatan dan penurunan yang menghilangkan contoh lama.

platform
sumber
2
Mungkin lebih efisien jika, setelah Anda membuat konfigurasi peluncuran baru dan memperbarui grup autoscaling Anda, Anda menandai setiap instance sebagai tidak sehat (misalnya menggunakan as-set-instance-health), sehingga autoscaling hanya menggantinya dengan instance baru.
cyberx86

Jawaban:

10

Saya ingin menyarankan "AWS-HA-Release" untuk melakukan ini - cara kerja AWS-HA-Release:

  1. Jika grup autoscaling saat ini dan ELB melaporkan 5 instance yang sehat,
  2. AWS-HA-Release membawa contoh baru ke dalam produksi dan menunggu ELB untuk mengidentifikasi itu sehat (membawa jumlah total contoh sehat ke 6)
  3. Menghapus instance lama (total ke 5)
  4. Membawa instance lain ke dalam layanan (total hingga 6)
  5. Menghapus instance lama (total ke 5)
  6. dan seterusnya sampai semua instance diganti

Dalam hal ini, Anda dapat mengirimkan kode baru atau versi AMI baru tanpa downtime dan mendapatkan manfaat dari instance yang sama sekali baru. Alat AWS-HA-Release tersedia di https://github.com/colinbjohnson/aws-missing-tools .

Colin Johnson
sumber
9

Cara yang lebih mudah adalah dengan menambah jumlah instance minimum di Auto-Scaling Group (ASG) untuk menggandakan jumlah Anda saat ini, tunggu ketika semuanya dimulai dan kemudian ubah jumlah minimum instance menjadi apa itu. ELB akan membunuh instance yang lebih lama dan akan meninggalkan instance yang lebih baru dengan kode. Untuk mencapai itu, kebijakan Pengakhiran harus diatur ke ' OldestInstance ' agar berfungsi sebagaimana dimaksud. Kebijakan penghentian standar mungkin memiliki efek samping yang tidak diinginkan.

Anda dapat melihat parameter dan contoh AWS CLI di sini: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html

Sergey Kuznetsov
sumber
Cheers, ini adalah metode yang sangat nyaman, tanpa kerumitan.
Elad Nava
1
Ini tidak akan selalu berhasil, sesuai dengan dokumen AWS, bahkan ketika memilih kebijakan terminasi kustom, ASG akan menjaga keseimbangan AZ sebelum menerapkan kebijakan terminasi. Jadi, hanya menggandakan dan membagi dua ukurannya dapat membuat Anda memiliki beberapa contoh lama. Ini sangat mungkin ketika menggunakan ASG dengan beberapa tipe instance dan opsi pembelian, karena ASG akan menjaga keseimbangan AZ dan opsi pasar (spot vs on demand) sebelum menerapkan kebijakan 'OldestInstance': docs.aws.amazon.com / autoscaling / ec2 / userguide / ...
Shahad
6

cara saya mengelola skenario ini adalah dengan menggunakan fitur UpdatePolicy dari objek AWS :: AutoScaling :: AutoScalingGroup dalam pembentukan cloud. ketika tumpukan formasi cloud diperbarui, ia akan mengelola siklus instance.

beberapa referensi. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html

graeme
sumber
Terima kasih banyak @graeme. Saya tidak tahu Cloudformation menawarkan fungsi ini.
AJB
Persis apa yang saya cari. Kami menyebarkan tumpukan kami melalui Jenkins karena perubahan melalui konsol AWS dikunci.
Greg Biles
3

Lihat juga alat Netflix Asgard yang sekarang open source. Tidak hanya itu dapat mengatur Auto Scaling Groups, ia juga dapat melakukan rilis gambar AMI baru untuk sekelompok instance.

platform
sumber
Maksud Anda "Netflix Asgard"
4
Netflix Asgard sekarang tidak digunakan lagi, diganti dengan Netflix Spinnaker
dlaidlaw
0

Sebenarnya tidak ada cara yang benar-benar baik untuk jujur. Cara terbaik yang saya temukan untuk melakukannya adalah dengan meletakkan versi dalam nama ASG. Setiap kali saya memperbarui AMI, saya membuat ASG + Launch Config baru dengan versi baru sehingga tidak bertentangan dengan grup lain. Kemudian saya mengakhiri semua instance dalam grup lama.

Jika penyebaran yang lebih toleran terhadap kesalahan diperlukan, saya sarankan untuk menambahkan langkah lain dengan melibatkan pembuatan loadbalancer baru juga. Ini memungkinkan Anda untuk memisahkan ASG dari satu sama lain. Ini juga memungkinkan Anda untuk memiliki area "Pementasan" untuk menguji perubahan Anda terakhir kali sebelum memperbarui. Kemudian ketika Anda siap untuk beralih, Anda memperbarui catatan DNS dan mengakhiri semua instance dalam grup lama.

bwight
sumber
0

Seperti yang saya posting di sini (pertanyaan serupa, hanya dengan Terraform), itu tidak dibangun ke ASG dengan cara apa pun, kecuali jika Anda menggunakan cloudformation. Saya berjuang dengan itu juga, jadi akhirnya menulis "roller" yang menonton beberapa ASG, memeriksa status dan pembaruan mereka. Selalu senang menerima umpan balik. http://github.com/deitch/aws-asg-roller

Deitch
sumber