Atualmente, tenho uma função em lambda que, quando invocada, envia uma mensagem para um usuário que a invocou. 2 dias depois, gostaria de enviar uma mensagem de acompanhamento. Todo o código para enviar a mensagem real funciona bem.
Estou usando o Lambda devido às habilidades de dimensionamento automático e, idealmente, quero evitar a necessidade de configurar um banco de dados separado para armazenar o userId, carimbo de data/hora da interação original (para que eu possa calcular o tempo de acompanhamento) e seguir mensagem para 2 dias depois. A razão para isso é devido ao dimensionamento, pois não tenho certeza de quando os picos ocorrerão. Este é um projeto de estrutura curta, mas espera alto envolvimento, mas em horários variados e desconhecidos.
Inicialmente pensei no SNS para chamar outra função lambda com os dados, no entanto, descobri desde então que o SNS não oferece suporte a mensagens agendadas. Idealmente, eu também gostaria de não envolver a votação de outro serviço. Existem boas soluções para isso?
Sei que não usar um banco de dados é uma forte limitação e se tiver que usar um, usarei um, mas ainda assim não ter que pesquisar seria útil (acho que poderia agendar uma função lambda e criar um índice no timestamp em dynamodb)
O serviço anunciado recentemente
AWS Step Functions
pode ajudá-lo a implementar o que você está descrevendo. O serviço pode coordenar a execução dos componentes de seu aplicativo, o que pode ser, por exemploLambda
, funções. Ele fornece um console gráfico onde você pode modelar dependências entre eles e definir uma máquina de estado finito que captura o fluxo de trabalho do aplicativo. Você pode encontrar mais informações sobre o serviço nos links a seguir:Funções de etapas da AWS
Anúncio do AWS Step Functions
Voltando ao seu caso. O Step Functions fornece um
Wait
estado que atrasa a continuação da máquina de estado por um tempo especificado. Portanto, o fluxo de trabalho do seu aplicativo pode ficar assim:O
FirstState
estado executaria uma função lambdasend a message to a user who invoked it
. Em seguida, esperaria 2 dias, representados porwait_using_seconds
estado e, finalmente, executaria uma função lambda 'enviar uma mensagem de acompanhamento', comoFinalState
estado.Definição da máquina de estado escrita em
Amazon States Language
: