A Amazon geralmente tenta recuperar a instância (se for problema deles), mas, na minha experiência, é mais rápido terminá-la e lançar uma nova se ela se resume a isso. Dito isto, em dois anos, eu só tive casos 'falhar' duas vezes. A Amazon não reiniciará uma instância bloqueada (por exemplo, troca excessiva, etc). Você pode usar o escalonamento automático para manter um número constante de instâncias (se uma falhar, será iniciada automaticamente uma nova para você).
Você não deve ter dados que exijam persistência em um volume de armazenamento de instância. Com os volumes do EBS (até mesmo os volumes da raiz), eles podem ser configurados para persistirem após a conclusão da instância e impedirão a perda de dados. (Além disso, a capacidade de capturar instantaneamente os volumes do EBS é extremamente útil).
Eu poderia sugerir que uma solicitação de instância spot persistente com sobrecuperação significativa reinicie uma instância com falha (mas a Amazon tem menos suporte para instâncias spot do que eu posso dizer - elas devem ser descartáveis). Essa abordagem não ajudará com uma instância 'congelada'.
Dependendo do que você está atendendo, você pode considerar duas instâncias menores que monitoram e se balanceamen- tam - isso diminui muito a probabilidade de que ambas diminuam, mas ainda devem ser usadas em conjunto com algo como o autoescalonamento. O Cloudwatch ajudará você a monitorar se uma instância está "congelada" (acredito que a granularidade de 5 minutos seja gratuita); você provavelmente também quer algum tipo de monitoramento externo (Pingdom / UploadRobot) apenas no caso.