Halaman AWS ELB "maaf, situs sedang down"

9

Saya memiliki situs ELB v2 dasar-ish. Belum ada pengelompokan atau apa pun. Saya cukup berpengalaman dengan AWS.

Tumpukan saya adalah nginx / uwsgi / django + beberapa layanan lainnya.

Saya bertanya-tanya apakah ada yang berpikir untuk membuat "maaf, situs webnya sedang down ..." - gaya (teks khusus yang dapat saya perbarui dengan downtime yang direncanakan adalah bonus!) Setiap kali ada downtime untuk alasan apa pun, dan kesehatan contohnya merah. Sepertinya Amazon tidak menawarkan kemampuan ini - apakah saya kehilangan sesuatu? Apakah ada cara untuk membuat contoh terpisah, super-kecil yang HANYA disajikan jika yang utama berwarna merah, atau sesuatu?

Terima kasih!

std''OrgnlDave
sumber

Jawaban:

22

Solusi sederhana dan keren di sini adalah menempatkan ELB Anda di belakang CloudFront.

Jika server asal (ELB dalam kasus ini) melempar kesalahan 5XX (atau 4XX jika Anda suka), CloudFront dapat mengembalikan halaman kesalahan khusus , yang dapat Anda konfigurasikan CloudFront untuk mengambil dari bucket S3 dengan membuat asal kedua yang menunjuk ke bucket dan membuat routing perilaku cache (mis.) /errors/static/*ke bucket.

Ini berfungsi lebih baik daripada Route 53 failover karena alasan penting ... cacat fatal, jika Anda mau ... browser mengerikan tentang caching pencarian DNS untuk jauh lebih lama dari yang Anda harapkan. DNS TTL tidak relevan.

Pada dasarnya, setelah browser memiliki entri DNS di tangan, itu hanya terus mencoba menggunakannya ... biasanya, sampai semua jendela browser ditutup.

Jadi, jika situs Anda digunakan untuk pengunjung yang sudah ada di situs, mereka tidak akan melihat situs pengganti.

Lebih buruk lagi, jika pengunjung mengunjungi situs Anda untuk pertama kalinya saat sedang down, mereka akan "menempel" pada halaman pemeliharaan sampai mereka menutup semua jendela browser.

Jika Anda menggunakan DNS failover, itu benar-benar hanya baik jika target failover masih aplikasi Anda, mungkin lebih jauh.

Anda dapat mematikan caching CloudFront jika Anda tidak membutuhkannya.

Anda juga dapat mengonfigurasi galat CloudFront, caching TTL ke nilai bukan nol jika Anda ingin berhenti memalu situs Anda saat sedang down dan mencoba memulihkan. Untuk halaman tertentu yang melakukan kesalahan, itu akan tetap menampilkan halaman kesalahan dan tidak mengganggu server Anda dengan lebih banyak permintaan untuk halaman itu sampai CachingTTL Kesalahan berakhir.

Michael - sqlbot
sumber
Menarik. AWS tidak menyebutkan kekurangan ini dalam dokumentasi mereka. Ini menggarisbawahi betapa pentingnya pengujian.
Tim
Nah @Tim, AWS merekomendasikan melakukan pembaruan bergulir. Mereka tidak memiliki "Layanan Docker" yang mereka tawarkan sekarang, jadi EBS itu untuk aplikasi Docker kami. Tapi hanya butuh satu.
std''OrgnlDave
6

Gunakan Route53 DNS dan perutean failover . Anda harus bisa mendapatkan ember S3 yang menampung situs web statis satu halaman. Saya tidak berpikir Anda bisa melakukannya hanya dengan ELB.

Amazon memiliki posting blog yang memberi tahu Anda bagaimana melakukannya di sini .

Pembaruan: seperti yang dikatakan Michael, ada kekurangan di sekitar cache DNS browser, lihat jawabannya untuk informasi lebih lanjut. Rute 53 mungkin merupakan opsi yang lebih sederhana daripada CloudFront, tetapi CF memiliki kelebihan lain, kinerja dan dalam beberapa kasus penggunaan dapat menurunkan biaya.

Tim
sumber
Saya katakan +1 di sini ... ini adalah solusi yang baik, tetapi tampaknya memiliki tumit achilles, membuatnya kurang layak dalam beberapa kasus penggunaan.
Michael - sqlbot
@ Michael-sqlbot apa kelemahan dari pendekatan ini? Waktu caching DNS browser?
Tim
Ya persis. Orang-orang "menempel" ke halaman kesalahan adalah sesuatu yang saya anggap menakutkan.
Michael - sqlbot
Berikut adalah posting blog yang diperbarui dari AWS dengan metode sederhana yang lebih baru untuk perutean failover ELB. aws.amazon.com/blogs/aws/… Lihat posting saya di bawah ini untuk lebih jelasnya.
AstroTom
2

Beberapa solusi telah disebutkan, termasuk CloudFront dan Route53. CloudFront adalah solusi yang sangat baik dan dalam pengalaman saya tidak memperlambat sama sekali, tetapi itu membawa biaya tambahan. Dan Route53 memiliki masalah caching DNS yang telah disebutkan.

Sampai ALB mendukung halaman kesalahan khusus di luar kotak (yang mungkin atau mungkin tidak terjadi), ada kemungkinan solusi baru setelah pengumuman tanggapan tetap ALB baru - baru ini , tetapi itu bukan poin dan klik: Anda dapat mengatur fungsi Lambda yang ditambahkan sementara untuk sementara aturan untuk load balancer Anda, memberikan respons tetap dengan konten 'halaman kesalahan' Anda.

Selain menulis Lambda, Anda harus menemukan cara untuk memicunya 'hidup' dan 'mati', yang mungkin bisa melalui pemeriksaan kesehatan Route53 atau pemeriksaan kesehatan kelompok target penyeimbang (mungkin melalui alarm CloudWatch -> SNS - > Lambda).

Ini tidak sepenuhnya sederhana, tetapi mungkin akan bekerja dengan baik setelah pengaturan!

Tim Malone
sumber
0

Seperti yang ditulis oleh @Tim dan @Micheal, Anda memiliki pilihan untuk menggunakan DNS Route53 dan perutean failover , atau CloudFront dengan halaman kesalahan khusus . Kedua metode memiliki pro dan kontra.

Jika Anda belum menggunakan Cloudfront, saya pikir Route53 adalah solusi yang lebih sederhana. Lihat posting blog yang diperbarui dari AWS (yang sekarang termasuk metode yang lebih sederhana untuk integrasi ELB).

CloudFront jauh lebih rumit untuk disetel, dan itu akan memakan waktu sekitar 15 menit untuk setiap pembaruan. Cloudfront juga melakukan cache (seperti yang diharapkan) sehingga tidak jelas apakah itu akan lebih lambat untuk merespons, daripada masalah cache DNS dengan Route 53.

Perhatikan bahwa jika situs web ELB Anda hanya menanggapi SSL maka Anda tidak dapat menggunakan solusi S3 sederhana seperti yang dijelaskan dalam blog AWS 3 . Dalam hal ini Anda harus menambahkan Cloudfront di depan bucket S3 untuk menambahkan SSL, ini membuat solusi routing kegagalan DNS lebih rumit.

AstroTom
sumber
Posting blog itu tidak menawarkan solusi bersih - memiliki masalah persis seperti yang saya sebutkan di posting saya dan dibahas dengan Tim dalam komentar. Ini sangat layak bila Anda memiliki beberapa penerapan yang dapat melayani permintaan Anda tetapi sepenuhnya tidak cocok untuk halaman kesalahan karena cara browser cache pencarian DNS. Sayangnya, isi posting AWS gagal mempertimbangkan kenyataan ini. Kegagalan DNS tidak dapat diandalkan "gagal kembali" dari perspektif pengguna akhir. CloudFront juga memiliki pengaturan cache yang sepenuhnya terpisah untuk respons kesalahan .
Michael - sqlbot