A solução simples e legal aqui é colocar seu ELB atrás do CloudFront.
Se o servidor de origem (neste caso, o ELB) gerar um erro 5XX (ou 4XX, se desejar), o CloudFront poderá retornar uma página de erro personalizada , que você poderá configurar para que o CloudFront seja buscado em um bucket S3, criando uma segunda origem apontando para o bucket e criando um roteamento de comportamento de cache (por exemplo) /errors/static/*
para o bucket.
Isso funciona melhor do que o failover do Route 53 por um motivo importante ... uma falha fatal, se você desejar ... os navegadores são péssimos em armazenar em cache as pesquisas de DNS por muito mais tempo do que o esperado. O DNS TTL não é relevante.
Essencialmente, quando um navegador tem uma entrada DNS na mão, ele continua tentando usá-lo ... normalmente, até que todas as janelas do navegador sejam fechadas.
Portanto, se o site for desativado para um visitante que já estava no site, é improvável que ele veja o site alternativo.
Pior ainda, se um visitante acessar o site pela primeira vez enquanto estiver inativo, ele "permanecerá" na página de manutenção até fechar todas as janelas do navegador.
Se você usa DNS de failover, isso é realmente bom apenas 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 erro do CloudFront em cache TTL para um valor diferente de zero, se desejar parar de martelar o site enquanto 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 CachingTTL de erro expire.