Executando o crontab no grupo de escalonamento automático da AWS

Executando o crontab no grupo de escalonamento automático da AWS

Tenho a seguinte configuração: 1 servidor com aplicação X, que roda um crontab uma vez por hora. O crontab se conecta ao banco de dados e executa alguns cálculos pesados, exporta dados para um arquivo de dados especial e reinicia o aplicativo. A exportação pode durar de 10 a 40 minutos.

Eu quero:

  • Mova esse servidor para AWS e use o grupo de escalonamento automático.

  • O crontab deve ser executado em apenas um servidor, fazer o cálculo, exportar os dados e de alguma forma sincronizá-los 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).

  • Novos servidores iniciados a partir dos grupos de escalonamento automático mostram a busca automática dos arquivos de dados na inicialização, antes de iniciar o aplicativo real.

Não tenho uma ideia "simples" de como fazer isso ou de 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 carregados no S3.

  • Todos os servidores de escalonamento automático terão um crontab que é executado a cada minuto e verifica um arquivo exclusivo "please_download_me_TIMESTAMP"

  • Assim que os arquivos forem baixados, o script reiniciará o serviço.

  • Se um novo servidor for iniciado, na inicialização ele irá buscar automaticamente todos os arquivos do S3.

Você acha que isso funcionaria?

Responder1

Este é um problema comum no AWS EC2 e foi resolvido. Verhttps://gist.github.com/kixorz/5209217para um exemplo com implementação.

Responder2

Reconhecer que esta é uma pergunta antiga de 2015, respondida por Joe, então é melhor respondê-la.

Se o trabalho for uma vez por hora e levar de 10 a 40 minutos, você estará pagando por uma hora inteira de qualquer maneira. Não faz sentido iniciar e desligar servidores, apenas deixe um servidor em execução.

Se fosse com menos frequência, você poderia ter um evento cronometrado que colocasse uma mensagem em uma fila SQS - isso poderia ser feito por um t2.nano ou talvez haja uma maneira mais barata de fazer isso com os serviços da Amazon - 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 depois desliga-se.

Outra maneira de fazer isso seria o escalonamento baseado no tempo, mas novamente apenas se fosse com menos frequência do que por hora.

informação relacionada