Die einfache und coole Lösung besteht darin, Ihre ELB hinter CloudFront zu stellen.
Wenn der Ursprungsserver (in diesem Fall die ELB) einen 5XX-Fehler auslöst (oder 4XX, wenn Sie möchten), kann CloudFront eine benutzerdefinierte Fehlerseite zurückgeben , auf der Sie CloudFront so konfigurieren können, dass es aus einem S3-Bucket abgerufen wird, indem Sie einen zweiten Ursprung erstellen, der auf den zeigt Bucket und Erstellen eines Cache-Verhaltens-Routings (z. B.) /errors/static/*
zum Bucket.
Dies funktioniert aus einem wichtigen Grund besser als Route 53-Failover ... ein schwerwiegender Fehler, wenn Sie so wollen ... Browser sind schrecklich, wenn es darum geht, DNS-Lookups viel länger als erwartet zwischenzuspeichern. Die DNS-TTL ist nicht relevant.
Sobald ein Browser einen DNS-Eintrag in der Hand hat, versucht er im Wesentlichen, ihn zu verwenden ... normalerweise, bis alle Browserfenster geschlossen sind.
Wenn Ihre Website für einen Besucher, der bereits auf der Website war, ausfällt, ist es unwahrscheinlich, dass er die alternative Website sieht.
Schlimmer noch, wenn ein Besucher Ihre Website zum ersten Mal besucht, während sie nicht erreichbar ist, bleibt er auf der Wartungsseite, bis er alle Browserfenster schließt.
Wenn Sie Failover-DNS verwenden, ist dies nur dann wirklich gut, wenn das Failover-Ziel noch Ihre Anwendung ist, möglicherweise nur etwas weiter entfernt.
Sie können das Caching von CloudFront deaktivieren, wenn Sie es nicht benötigen.
Sie können CloudFronts Fehler beim Zwischenspeichern von TTL auch auf einen Wert ungleich Null konfigurieren, wenn Sie möchten, dass Ihre Website nicht mehr gehämmert wird, während sie nicht verfügbar ist, und versuchen, sie wiederherzustellen. Für eine bestimmte Seite, die einen Fehler auslöst, wird die Fehlerseite weiterhin angezeigt und Ihr Server wird nicht mit weiteren Anforderungen für diese Seite belästigt, bis die Fehler-CachingTTL abläuft.