La solution simple et cool ici est de mettre votre ELB derrière CloudFront.
Si le serveur d'origine (l'ELB dans ce cas) génère une erreur 5XX (ou 4XX si vous le souhaitez), CloudFront peut renvoyer une page d'erreur personnalisée , que vous pouvez configurer CloudFront pour extraire d'un compartiment S3 en créant une deuxième origine pointant vers le et créer un routage de comportement de cache (par exemple) /errors/static/*
vers le compartiment.
Cela fonctionne mieux que le basculement Route 53 pour une raison importante ... une faille fatale, si vous voulez ... les navigateurs sont terribles à propos de la mise en cache des recherches DNS pendant beaucoup plus longtemps que prévu. Le DNS TTL n'est pas pertinent.
Essentiellement, une fois qu'un navigateur a une entrée DNS en main, il continue d'essayer de l'utiliser ... généralement, jusqu'à ce que toutes les fenêtres du navigateur soient fermées.
Donc, si votre site tombe en panne pour un visiteur qui était déjà sur le site, il est peu probable qu'il voit le site alternatif.
Pire encore, si un visiteur accède à votre site pour la première fois alors qu'il est en panne, il "collera" sur la page de maintenance jusqu'à ce qu'il ferme toutes les fenêtres du navigateur.
Si vous utilisez le DNS de basculement, ce n'est vraiment bon que si la cible de basculement est toujours votre application, peut-être juste plus loin.
Vous pouvez désactiver la mise en cache de CloudFront si vous n'en avez pas besoin.
Vous pouvez également configurer la mise en cache TTL des erreurs de CloudFront sur une valeur différente de zéro si vous souhaitez qu'il cesse de marteler votre site pendant qu'il est en panne et tente de récupérer. Pour une page donnée qui génère une erreur, il continuera d'afficher la page d'erreur et ne dérangera pas votre serveur avec plus de demandes pour cette page jusqu'à l'expiration de l'Erreur CachingTTL.