В настоящее время у меня есть функция лямбда, которая при вызове отправляет сообщение пользователю, который ее вызвал. Через 2 дня я хотел бы отправить дополнительное сообщение. Весь код для отправки фактических сообщений работает нормально.
Я использую Lambda из-за возможности автоматического масштабирования, и в идеале я хочу избежать необходимости настраивать отдельную базу данных для хранения userId, метки времени исходного взаимодействия (чтобы я мог определить время последующего) и следовать сообщение на 2 дня позже. Причина этого связана с масштабированием, поскольку я не уверен, когда будут пики. Это короткий проект, но он ожидает высокой вовлеченности, но в неизвестное и разное время.
Сначала я думал, что SNS вызовет другую лямбда-функцию с данными, однако с тех пор я обнаружил, что SNS не поддерживает запланированные сообщения. В идеале я бы также не хотел задействовать опрос другого сервиса. Есть ли для этого хорошие решения?
Я понимаю, что отказ от использования БД является сильным ограничением, и если мне придется использовать один, я буду использовать один, но все же без опроса было бы полезно (я думаю, я мог бы запланировать лямбда-функцию и создать индекс на временной метке в динамодб)
Недавно объявлено AWS Step Functions
сервис может помочь вам реализовать то, что вы описываете. Служба может координировать выполнение компонентов вашего приложения, например, Lambda
функции. Он предоставляет вам графическую консоль, где вы можете моделировать зависимости между ними и определять конечный автомат, который фиксирует рабочий процесс приложения. Вы можете найти более подробную информацию об услуге по следующим ссылкам:
Представляем AWS Step Functions
Вернемся к твоему делу. Step Functions предоставляет вам Wait
состояние, которое задерживает работу конечного автомата в течение заданного времени. Итак, рабочий процесс вашего приложения может выглядеть так:
В FirstState
состояние будет выполнять лямбда-функцию send a message to a user who invoked it
. Затем он будет ждать 2 дня, представленных wait_using_seconds
состояние, и, наконец, он выполнит лямбда-функцию «отправить последующее сообщение», как FinalState
штат.
Определение конечного автомата, написанное на Amazon States Language
:
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "FirstState",
"States": {
"FirstState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION1",
"Next": "wait_using_seconds"
},
"wait_using_seconds": {
"Type": "Wait",
"Seconds": 172800,
"Next": "FinalState"
},
"FinalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION2",
"End": true
}
}
}