在 AWS API 上获取 ThrottlingException:超出速率,状态代码:400

Shi*_*dhi 5 amazon-web-services aws-lambda aws-sdk-go aws-fargate

我有 110 个 Fargate 任务正在运行(并不总是并行)。我正在尝试按照 AWS SDK 上的指导使用“ListFunctions”调用从其他 AWS 账户(通过 CrossAccountRole)获取 lambda - https://docs.aws.amazon.com/sdk-for-go/api/service/lambda/ #Lambda.ListFunctions

在进行 (SDK) API 调用时,我有时会遇到节流错误: ThrottlingException:超出速率,状态代码:400

还经历了这个解决方案 - https://docs.aws.amazon.com/general/latest/gr/api-retries.html

想了解 AWS SDK Service (lambda) 是否已经实现了它。在我的情况下,我是否需要自定义重试实现,或者只是增加 Fargate 的速率限制?

Mar*_*cin 3

对于您发布的文档:

除了简单的重试之外,每个 AWS 开发工具包还实施指数退避算法以实现更好的流量控制。

aws 博客进一步阐明了这一点:

注意:每个 AWS开发工具包都实现自动重试逻辑和指数退避算法。

在我的情况下,我是否需要自定义重试实现,或者只是增加 Fargate 的速率限制?

如果您使用 AWS SDK,则无需实施任何特殊操作。但是,您的异常可能与AWS Lambda 函数扩展有关:

当请求传入的速度快于函数可扩展的速度时,或者当函数达到最大并发时,其他请求会失败并出现限制错误(429 状态代码)。

因此,如果您认为您达到了 lambda 的并发限制(这可能是由于大量 Fargate 任务造成的),您可以考虑向 AWS 支持请求增加并发限制。默认限制为 1000,这似乎足以满足您的任务。但也许另一个帐户也在运行其他 lambda。1000个限制适用于账户和区域中的所有功能。