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

上次更新时间:2019 年 10 月 17 日

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

简短描述

对任何 AWS 服务的 API 调用不能超过每个账户和每个 AWS 区域允许的最大 API 请求速率。调用是来自应用程序、AWS 命令行界面 (AWS CLI),还是来自 AWS 管理控制台,不是问题的关键。如果 API 请求超出最大速率,您会收到“超出速率”错误,然后 API 调用会受限。

您可以从直接对 Elastic Beanstalk 进行的 API 调用以及由 Elastic Beanstalk 管理的其他 AWS 服务(例如 AWS CloudFormation)收到错误。

解决方法

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

验证哪些 API 调用受限

1.    在您的 Elastic Beanstalk 事件流中,确定限制错误。注意收到错误的时间范围。

注意:如果 API 调用来自 Elastic Beanstalk 之外的应用程序或脚本,请在应用程序日志中查找时间范围。

2.    对于在时间范围内发现的带有 RequestLimitExceeded 错误的请求,请使用 AWS CloudTrail 查看事件并验证 eventNameeventSource (服务)和 userAgent.

在 Elastic Beanstalk 环境中验证“describe”调用

按照允许的请求速率衡量,太多“describe”调用计入了 API 请求总数。

例如,您可以使用以下两种方法之中的任何一种来验证用于在 Elastic Beanstalk 环境中发现 Amazon Elastic Compute Cloud (Amazon EC2) 实例的“describe”调用。

使用 EnvironmentResourceDescription。请参阅以下示例:

$ aws ec2 describe-instances --filters Name="tag:elasticbeanstalk:environment-id",Values="Your_Environment_ID"

-或者-

DescribeInstances API 调用与用于您的 Elastic Beanstalk 标签的筛选器一起使用。请参阅以下示例:

$ aws ec2 describe-instances --filters Name="tag:elasticbeanstalk:environment-name",Values="Your_Environment_Name"

注意:EnvironmentResourceDescription API 调用相比,DescribeInstances API 调用速率的速率限制往往更高。

检查来自第三方应用程序的调用

第三方应用程序可以连续调用 Elastic Beanstalk 或由 Elastic Beanstalk 管理的其他 AWS 服务。

要确认您的第三方应用程序没有对 Elastic Beanstalk 服务或任何 Elastic Beanstalk 集成服务进行不必要的调用,请使用 CloudTrail 检查进行 API 调用的用户代理。

注意:第三方应用程序(例如 DatadogNew Relic)可以对 Elastic Beanstalk 进行 API 调用。有关更多信息,请参阅 DatadogNew Relic 的速率限制警报。AWS 不支持第三方应用程序。

使用错误重试和指数退避

使用错误重试和指数退避帮助限制 API 调用的速率。

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

在 AWS Support 中心请求放宽服务限制

在请求放宽服务限制之前,请完成以下各项事宜:

  • 确认 API 调用和调用速率。
  • 尝试使用错误重试或指数退避。
  • 在您请求放宽服务限制的请求中,添加您的 AWS 区域、与限制问题相关的时间范围以及要放宽限制的使用案例。

请求放宽服务限制


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?