A solução simples e interessante aqui é colocar o seu ELB no CloudFront.
Se o servidor de origem (o ELB, neste caso) lança um erro 5XX (ou 4XX, se quiser), o CloudFront pode retornar um página de erro personalizada , que você pode configurar o CloudFront para buscar a partir de um bucket do S3 criando uma segunda origem apontando para o bucket e criando um roteamento de comportamento do cache (por exemplo) /errors/static/*
para o balde.
Isso funciona melhor do que o failover do Route 53 por uma razão importante ... uma falha fatal, se você ... os navegadores forem terríveis com o cache de pesquisas de DNS por muito mais tempo do que o esperado. O TTL do DNS não é relevante.
Essencialmente, quando um navegador tem uma entrada de DNS em mãos, ele simplesmente tenta usá-lo ... normalmente, até que todas as janelas do navegador sejam fechadas.
Portanto, se o seu site ficar inativo para um visitante que já estava no site, é improvável que ele veja o site alternativo.
Pior, se um visitante acessar seu site pela primeira vez enquanto estiver inativo, ele ficará "preso" na página de manutenção até fechar todas as janelas do navegador.
Se você usa o DNS de failover, isso é realmente bom somente se o destino de failover ainda for seu aplicativo, talvez um pouco mais longe.
Você pode desativar o cache do CloudFront se não precisar dele.
Você também pode configurar o TTL de cache de erros do CloudFront para um valor diferente de zero se quiser que ele pare de martelar seu site enquanto ele estiver inativo e tentando se recuperar. Para uma determinada página que gera um erro, ela continuará mostrando a página de erro e não incomodará o servidor com mais solicitações para essa página até que o Erro CachingTTL expire.