如何解决 Elastic Beanstalk 中的 API 限制或“超出速率”错误?

1 分钟阅读
0

如何解决在使用 AWS Elastic Beanstalk 时出现的 API 限制或“超出速率”错误?

简短描述

对任何 AWS 服务的 API 调用不能超过每秒允许的最大 API 请求速率。该限制在每个账户和每个 AWS 区域的所有资源之间共享。

调用是来自应用程序、AWS 命令行界面(AWS CLI),还是来自 AWS 管理控制台,不是问题的关键。如果 API 请求超出每秒的最大速率,您会收到“超出速率”错误,然后 API 调用会受限。某些 API 调用每秒可以进行数十次,而其他调用则限制为每秒允许几次调用。

注意:如果您在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

您可以从直接对 Elastic Beanstalk 进行的 API 调用以及由 Elastic Beanstalk 管理的其他 AWS 服务(例如 AWS CloudFormation、Amazon Elastic Compute Cloud (Amazon EC2)、Auto Scaling 和 Load Balancing)收到错误。随着账户使用量的增加或您向同一账户添加更多资源,限制的风险也会增加。

**注意:**调用限制可能因一天中的不同时间而异,因为我们的服务会根据负载进行调整。最佳实践是动态调整使用 API 的速率,以适应动态限制行为。

解决方法

为防止出现或解决“超出速率”错误和限制,请尝试以下解决方案:

找出高 API 调用的来源

1.    在您的 Elastic Beanstalk 事件流中,确定限制错误。注意收到错误的时间范围。或者,如果 API 调用来自应用程序或脚本,请在应用程序日志中查找时间范围。

2.    对于在时间范围内发现的发生 RequestLimitExceeded 错误的请求,请使用 AWS CloudTrail 查看事件并验证 eventNameeventSource (服务)和 userAgent。将 Elastic Beanstalk 事件或日志中的错误时间戳与 CloudTrail 中发现的错误进行匹配。这将帮助您了解账户中的哪个源消耗最多 API 调用。

注意:手动计算 CloudTrail 记录的数量可能很困难。您也可以通过 CloudTrail 使用 Athena 查询

Amazon CloudWatch 使用量指标可帮助您监控一段时间内的 API 使用情况。请注意,目前使用量指标中并不支持全部服务和 API 调用。

第三方应用程序可以连续调用 Elastic Beanstalk 或由 Elastic Beanstalk 管理的其他 AWS 服务。如果您授予第三方应用程序在您的账户中进行 API 调用的权限,请确保您也对这些调用进行监控。

使用最佳实践减少 API 的使用

使用错误重试、指数回退和抖动帮助限制 API 调用的速率。虽然每个 AWS 开发工具包都实现了自动重试逻辑和指数回退算法,但如果默认重试逻辑不够,您可能需要调整开发工具包配置设置以满足需求。

注意:SDK 设置只是需要考虑的一个部分。在调用 SDK 时,您自己的代码也应使用回退、重试和抖动逻辑。

如果您有一个自定义脚本每秒调用 API,请考虑是否有必要。对于高级使用情况,请考虑创建缓存层以减少 API 消耗。您也可以考虑使用多账户策略。最佳实践是防止单个 AWS 账户增长过大。将开发或测试资源与生产资源分开可以防止开发资源从生产资源中夺走 API 使用量。

请求提高 API 调用速率限制的值

如果需要,您可以请求提高 API 调用速率限制的值。与典型的基于资源的限制相比,这些限制更难提高,并且需要强有力的使用案例论证。我们的团队将审核您的 API,并确保它们遵循了最佳实践。如有任何需要,应提前提出请求。

申请提高限制时,请提供以下信息:

  • 您的 AWS 区域以及与限制问题相关的时间范围
  • 您使用的 API 调用和所需的调用率
  • 详细的使用案例论证,例如业务需求和技术需求的增加

在发送请求之前,请务必尝试使用错误停用、指数回退和抖动。并在请求中包含这些尝试的结果以及与这些尝试相关的信息。


相关信息

AWS 中的错误重试和指数回退

指数回退和抖动

使用 AWS CloudTrail 记录 Elastic Beanstalk API 调用

CloudWatch 使用情况指标

使用多个 AWS 账户的好处

AWS 官方
AWS 官方已更新 2 年前