Depois de muita pesquisa e tentativa / erro, aqui está o que acabamos fazendo:
- Colocamos cada tipo de servidor em seu próprio Grupo de Auto Scaling com um script de shell de dados do usuário para configurar totalmente os servidores.
- Utilizamos tags para rastrear recursos em servidores que queríamos transferir (IP privado, IP elástico, EBS etc.).
- Na inicialização de uma instância de substituição, nosso script de dados do usuário consulta a AWS CLI para obter uma instância finalizada do mesmo tipo que possui as tags de recurso disponíveis.
- Usamos os dados nessas tags e o AWS CLI para reatribuir esses recursos ao servidor substituto e, em seguida, removemos os tags do servidor antigo.
- Como isso é tudo em uma VPC, o IP privado ainda está disponível para nós, já que é liberado de volta para a VPC após o encerramento da instância.
Já tivemos essa execução por alguns dias e parece estar funcionando muito bem (embora isso continue a ser visto quando uma instância realmente falha por algo diferente de terminá-la diretamente para teste).