Aws lambda 在无服务器环境中计划一次性事件的最佳方法 示例用例

Aws lambda 在无服务器环境中计划一次性事件的最佳方法 示例用例,aws-lambda,google-cloud-functions,scheduled-tasks,serverless,Aws Lambda,Google Cloud Functions,Scheduled Tasks,Serverless,注册2小时后向用户发送通知 考虑的选择 setTimeout(()=>{/*发送通知*/},2*60*60*1000)在无服务器环境中不是选项,因为函数在执行后终止(因此它必须是无状态的) CloudWatch事件可以使用cron表达式调度lambda调用,但这是为重复调用而设计的(限制为100个规则/区域) 我在AWS SNS/SQS或GCP Pub/Sub中没有看到调度选项。是否有其他调度选项 我想避免(如果可能的话)设置一个专用的MessageBroker(overkill)或有状态/非无

注册2小时后向用户发送通知

考虑的选择
setTimeout(()=>{/*发送通知*/},2*60*60*1000)在无服务器环境中不是选项,因为函数在执行后终止(因此它必须是无状态的)

CloudWatch事件可以使用cron表达式调度lambda调用,但这是为重复调用而设计的(限制为100个规则/区域)

我在AWS SNS/SQS或GCP Pub/Sub中没有看到调度选项。是否有其他调度选项

我想避免(如果可能的话)设置一个专用的MessageBroker(overkill)或有状态/非无服务器实例——有没有一种无服务器的方法可以做到这一点


我可以在数据库中对事件进行排队,并每分钟调用lambda函数来轮询数据库,以便在该分钟内执行事件。。。有更优雅的解决方案吗?

使用AWS Step函数,它们就像无服务器函数一样,没有AWS Lambda那样的15分钟限制。您可以在AWS步骤中设计一个工作流,该工作流与API网关、Lambda和SNS集成,以发送电子邮件和文本通知,如下所示:

  • 通过API网关创建一个REST API,该API将调用Lambda函数传入,例如,SNS通知的目标地址(电子邮件、电话),发送时间,通知方法(例如电子邮件、文本等)
  • 调用时的Lambda函数将调用传递数据的Step函数(需要Lambda,因为API网关当前无法直接调用Step函数)
  • Step函数基本上是一个工作流,您可以定义等待状态(如等待指定时间发送通知,例如30秒),以及调用其他Lambda函数的状态,这些函数可以使用SNS发送电子邮件和/或文本通知

  • AWS提供了一个任务计时器示例。

    GCP正在为此做一些事情,但不是很快。因此,今天的解决方案是轮询数据库


    您可以使用带有执行日期时间索引的Datastore/firestore(以防止每分钟读取所有文档)来访问它。但是要小心流量高峰,你可以创建热点。

    你可以在谷歌云平台上使用云调度器。如官方文件所述:

    云调度器是一个完全受管理的企业级cron作业调度器。它允许您安排几乎任何作业,包括批处理、大数据作业、云基础设施操作等。您可以自动化所有操作,包括在出现故障时重试,以减少手动劳动和干预。CloudScheduler甚至可以充当一块玻璃,允许您从一个地方管理所有自动化任务


    在这里,您可以检查是否将其用于发布/订阅和云功能

    看看谷歌云任务。@DougStevenson谷歌云任务看起来非常适合这个-谢谢!我会试试。Google Cloud Scheduler看起来类似于CloudWatch事件-它是为重复/cron作业设计的-有一个。如果您的调用不应该重复,您还可以检查云任务: