AWS Step Function 中的负载控制函数

Load Control Function in AWS Step Function

AWS Step Function 状态机的核心是 Lambda 函数,它对 S3 存储桶进行大量写入。当状态机出现使用高峰时,由于 S3 阻止进一步的请求 (com.amazonaws.services.s3.model.AmazonS3Exception: Please reduce your request rate.),函数开始失败。这显然会导致状态机整体执行失败,整个系统需要几分钟才能完全恢复。

我查看了 AWS Lambda Function Scaling Documentation 并发现,当我们减少 保留并发 标志时,函数将开始 return 429 状态代码,一旦它不能处理新事件。

所以我的加载控制函数执行的思路可以总结如下:

  1. 预留并发设置为某个较低的值。
  2. 捕获步进函数中的 429 错误和 retrying with a backoff rate

我希望得到你们的反馈,关于以下方面:

一个。我的方法是否有意义,或者我是否遗漏了一些明显更好的方法?我首先想到的是研究使用 AWS SQS 或某些执行范围 locking/semaphore 来管理负载,但并没有真正看到更多。 b.是否有其他方法可以从 S3 端解决该问题?

这种方法对我很有效:

States:
 MyFunction:
  Type: Task
  End: true
  Resource: "..."
  Retry:
   - ErrorEquals:
      - TooManyRequestsException
     IntervalSeconds: 30
     MaxAttemtps: 5
     BackoffRate: 2