在特定时间段后停止所有 AWS 计算

Stoping all AWS Compute after a certain time period

我的任务是抓取 URL 并在 30 秒后突然停止 AWS Lambda,之后抓取的 URL 数量将作为评估指标。在一个简单的架构中,我有 1 个 lambda 接受一个文件并循环遍历它并写入数据库,我可以简单地要求它在 30 秒后超时。为了我的学习和满足缩放的其他标准,我采用的架构是这样的:

因此,即使我的 lambda 表达式超时,它们也会再次 运行,因为 Fargate 将 URL 作为事件发送。 Fargate 的要点是能够下载一个巨大的文件,因为 Lambda 有限制。事件的使用将通过简单地允许更多并发 lambda 来帮助我实现规模。 我能否以某种方式停止事件总线以在 30 秒后冻结发送或接收通知?我能以某种方式停止所有计算吗?

我可以将错误等(我过去只收到超时错误)发送到死队列或 SNS 主题,并显示系统对突然崩溃的弹性。我还可以通过显示日志来展示抓取的 URL 数量。但是假设这些措施不能让评估者满意,我有什么办法吗?

我可以为消息和队列添加延迟,但这有什么用呢?我不能在一定时间后添加延迟。那会奏效的。

一种方法是在一段时间后使用容器中的 cli 或 SDK 禁用事件规则:

$ aws events disable-rule --name MyRule --event-bus-name MyEventBus

另一个停止所有进一步 lambda 调用的选项是根据 将并发限制设置为 0:

$ aws lambda put-function-concurrency --function-name my-function --reserved-concurrent-executions 0

这不会停止已经 运行 - Lambda 无法完成的执行。

然后可以按插入时间戳过滤您的数据库,以删除阈值之后发生的所有写入。