微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按计划一次一次运行多个参数的AWS Lambda

如何解决按计划一次一次运行多个参数的AWS Lambda

我有一个lambda函数,该函数接受一个参数,即category_id,从API中提取一些数据,并根据响应更新数据库

每天间隔1分钟后,我必须对多个ID执行相同的lambda函数。 例如,在12:00 AM为类别1运行lambda,然后在12:01 AM为类别2运行,所以对500多个类别运行lambda。

实现这一目标的最佳解决方案是什么?
这是我目前在想的:

  • 使用AWS SAM编写Lambda
  • 为共享依赖项添加Lambda层
  • 将Lambda与AWS Cloudwatch Events关联以按计划运行
  • 在lambda中为category_id添加环境变量
  • 一次又一次地更新SAM模板以使用相同的lambda函数,但唯一的变化将是Cron表达式时间表和环境变量的值category_id

上述解决方案中的问题:

  • 该帐户中的Lambda函数数量增加
  • 每个Lambda都将附加一个Cloudwatch Event,因此其数量也会增加
  • 每个帐户的配额上限为300个Cloudwatch事件(尽管我们可以请求支持增加该限额)
  • 由于SAM模板的大小限制以及每个模板的最大200个资源,因此需要使用嵌套堆栈。
  • 每个嵌套堆栈只能创建50个Lambda函数,这意味着嵌套堆栈的数量也会增加,因为1 lambda = 4种资源(Lambda + Role + Rule + Event)

其他解决方案(不确定是否可以使用):

  • 步进功能的使用
  • 仅使用Cron Schedule触发第一个Lambda函数,并使用当前Lambda调用一个类别的Lambda(只需要一个CloudWatch Event调用一个类别的函数,但时差会有所不同,即下一个Lambda将不会在之后精确执行一分钟)。
  • 仅使用一个Lambda和一个Cloud Watch Schedule事件,Lambda函数将具有所有类别ID的列表,并且该函数将通过一次使用一个类别ID并从列表中删除使用类别ID来递归调用自身(唯一的问题是,对于列表中的下一个category_id,lambda不会在一分钟后准确执行)

期待听到最好的解决方案。

解决方法

我建议使用标准的Worker模式:

  • 创建 Amazon SQS队列
  • 配置AWS Lambda函数,以使其在将消息发送到SQS队列时触发运行
  • 在午夜触发一个单独的过程(例如另一个Lambda函数),该过程将500条消息发送到SQS队列,每个消息具有不同的类别ID

这将导致执行Amazon SQS功能。如果您只希望Lambda函数之一可以在任何时间运行(没有并行执行),请将函数的并发限制设置为1 ,以便任何时候都只能运行一个。一个功能完成后,Lambda将自动从队列中获取另一条消息并开始执行。函数执行之间几乎没有“浪费时间”。

,

鉴于您正在进行大量处理,Amazon EC2实例可能更合适。

如果带宽需求较低(例如,仅是进行API调用),那么T3a.micro(每小时0.0094美元)或什至T3a.nano实例(每小时0.0047美元)都可能非常划算。

在实例上运行的脚本可以处理一个类别,然后大循环休眠30秒。在一分钟内运行500个类别大约需要8个小时。每天不到10分!

工作完成后,实例可以停止或自行终止。参见:Auto-Stop EC2 instances when they finish a task - DEV Community

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。