Eu tenho este esquema para receber solicitações http e fazer algum processamento em arquivos em uma instância do Windows Server EC2.
API Gateway -> Lambda -> EC2 (Node.js + Express)
Por enquanto, há algumas solicitações por dia, , para que a instância seja interrompida até que uma solicitação seja . Quando uma requisição chega, a função Lambda inicia a instância , mas a primeira requisição é perdida . Se a instância estiver em execução, a solicitação será encaminhada.
Eu quero uma solução na qual eu não perca o primeiro pedido. Eu tenho várias abordagens, mas nenhuma delas parece ser a certa:
1) Salve esse pedido no ElastiCache (Redis / memcached). Na inicialização do servidor Express, verifique se há alguma solicitação salva.
2) Use o Amazon SQS para armazenar todas as solicitações. Em seguida, alterne a Express API para um trabalhador para verificar o SQS em busca de novas mensagens. Eu não gosto desta solução porque vou verificar o tempo todo para um SQS que na maioria das vezes estará vazio e suponho que isso pode ser caro.
3) Volte a invocar a função Lambda com um atraso. Basta fazer outra chamada para a função Lambda com a mesma solicitação em 1 minuto (por exemplo), quando a instância estiver pronta. Esta é a melhor solução agora, na minha opinião, simples e eficaz, mas não sei como implementá-la. Eu sei que você pode agendar execuções Lambda, mas existem como "executar esta função todos os dias às 15:00", e eu só quero executar a função uma vez com um atraso.
Estou preso a isso, espero que alguém possa esclarecer minhas ideias.