Este é um problema comum no AWS EC2 e foi resolvido. Consulte o link para obter um exemplo com a implementação.
Eu tenho a seguinte configuração: 1 servidor com aplicativo X, que executa um crontab uma vez por hora. O crontab se conecta ao banco de dados e executa cálculos pesados e exporta dados para um arquivo de dados especial e reinicia o aplicativo. A exportação pode ser executada de 10 minutos a 40 minutos.
Eu quero:
Mova esse servidor para a AWS e use o grupo de escalonamento automático.
O crontab é executado em apenas um servidor, faça o cálculo para exportar os dados e, de alguma forma, sincronize-os com todos os outros servidores ativos.
Todos os servidores devem detectar automaticamente os novos dados e reiniciar-se com segurança (não durante a sincronização, por exemplo).
Os novos servidores que iniciam a partir dos grupos de dimensionamento automático mostram automaticamente os arquivos de dados na inicialização antes de iniciar o aplicativo real.
Não tenho uma ideia "simples" sobre como fazer isso ou qualquer solução específica da AWS.
Esta é a minha ideia:
Execute um servidor fora do grupo de escalonamento automático. Execute o crontab apenas nesse servidor. Todos os arquivos de dados serão enviados para o S3.
Todos os servidores de escalonamento automático terão um crontab que será executado a cada minuto e verificará um arquivo exclusivo "please_download_me_TIMESTAMP"
Quando os arquivos forem baixados, o script reiniciará o serviço.
Se um novo servidor for iniciado, na inicialização, ele buscará automaticamente todos os arquivos do S3.
Você acha que isso funcionaria?
Este é um problema comum no AWS EC2 e foi resolvido. Consulte o link para obter um exemplo com a implementação.
Reconhecendo que essa é uma pergunta antiga de 2015, contestada por Joe, posso responder também.
Se o trabalho for uma vez por hora e levar de 10 a 40 minutos, você pagará uma hora inteira de qualquer maneira. Não faz sentido iniciar e desligar servidores, apenas deixe um servidor em execução.
Se fosse menos frequente você poderia ter um evento cronometrado que colocasse uma mensagem em uma fila SQS - isso poderia ser feito por um t2.nano ou talvez houvesse uma maneira mais barata de fazer isso com os serviços da Amazon - o Lambda? Escala automática com base no tamanho da fila. Quando há dados a serem processados, um servidor é criado, processa os dados, move-os para onde for necessário e, em seguida, desliga-se.
Outra maneira de fazer isso seria o escalonamento baseado em tempo, mas novamente apenas se fosse menos do que hora a hora.