Kami memiliki tugas yang memuat beberapa file konfigurasi dari sumber data eksternal. Setelah pengaturan diunggah, kami ingin dapat memulai kembali semua tugas dalam layanan sehingga pengaturan menyebar ke semua instance.
Apa cara terbaik untuk me-restart semua layanan?
Kami memiliki 'solusi' yang melibatkan pengaturan 'jumlah tugas' menjadi 0 dan kemudian dicadangkan, tetapi ini jelas bukan cara yang seharusnya dilakukan dan memiliki waktu henti.
amazon-web-services
docker
amazon-ecs
Dennkster
sumber
sumber
Jawaban:
Menggunakan alat AWS CLI:
sumber
Apa yang ingin Anda lakukan pada dasarnya sama dengan mempekerjakan kembali Layanan.
Untuk menggunakan kembali layanan tanpa downtime:
Ini akan meluncurkan Tugas baru untuk Definisi Tugas baru dan kemudian membunuh Tugas lama untuk Definisi Tugas lama, secara efektif memulai kembali tugas tanpa downtime.
Lihat: Pembaruan Layanan
sumber
ini bekerja untuk saya:
tugas-tugas kemudian buat kembali pada contoh yang sama.
jika Anda membutuhkan contoh baru, gunakan ini:
sumber
Tugas sebagai blok bangunan ECS dapat dihentikan dengan panggilan StopTask . Layanan terdiri dari tugas-tugas mendasar yang dapat dihentikan dengan panggilan API yang sama. Hanya bagian yang hilang di sini yang melihat hasil dari panggilan ListTasks dengan parameter keluarga yang ditentukan. Saya menulis fungsi Lambda sederhana yang dapat membantu Anda dengan ini.
sumber
Saya memperluas jawaban @ user326608 di atas (terima kasih atas wawasannya!).
Ini akan memulai kembali SEMUA TUGAS UNTUK SEMUA LAYANAN UNTUK KLUSTER dengan menghentikan semua tugasnya. Setiap layanan kemudian akan secara otomatis meluncurkan
X
sejumlah tugas baru, di manaX
layanan itudesired task count
.sumber
Berdasarkan dokumentasi Amazon sepertinya Anda harus dapat skrip operasi yang bersangkutan menggunakan panggilan API UpdateService . Ada beberapa contoh kode yang tersedia di tautan sebelumnya, mungkin Anda dapat beradaptasi. Sepertinya menulis skrip untuk menangani reload layanan menggunakan definisi tugas yang sesuai setelah pembaruan konfigurasi tugas akan menjadi solusi paling elegan untuk masalah ini.
Ada lebih banyak dokumentasi tentang menggunakan AWS CLI dengan ECS yang sepertinya itu akan menjadi cara termudah untuk menangani batch scripting untuk memulai kembali layanan.
sumber
Bekerja dengan baik https://github.com/fdfk/ecsServiceRestart
sumber
Saya telah mengerjakan ini. Akan sangat berguna untuk dapat memulai kembali satu tugas secara andal. Script di bawah ini adalah apa yang saya gunakan sekarang. Ini cukup hati-hati. Membutuhkan Anda menekan pengembalian untuk setiap tugas. Ada perintah untuk menunggu agar layanan stabil, tetapi itu tidak berarti bahwa tugas itu sehat. Dan saya bisa menunda waktu. Tetapi pada akhirnya jika semuanya memburuk, skrip akan perlahan-lahan mematikan aplikasi. Begitu...
sumber
Saya memiliki skrip python boto3 yang berfungsi sebagai ff:
ecs_client.list_tasks(cluster=mycluster,serviceName=myservice,desiredStatus='RUNNING')
ecs_client.stop_task(cluster=mycluster,task=mytask)
ecs_client.describe_services(cluster=mycluster,services=[myservice])
while myservice['services'][0]['runningCount'] < myservice['services'][0]['desiredCount']:
Jika loop sementara tidak benar lagi - artinya jumlah yang berjalan dan yang diinginkan sama, hentikan tugas berikutnya dalam daftar.
Ini adalah aliran aktual dan saya tidak dapat menampilkan kode yang sebenarnya karena saya masih dipekerjakan oleh pekerjaan saya saat ini dan semua kode saya milik mereka :)
sumber