当应用程序调用 Amazon EC2 Auto Scaling、AWS Auto Scaling 或 AWS Application Auto Scaling 时,我的应用程序收到“已超出速率”错误。
简短描述
API 调用不能超过每个 AWS 账户和每个 AWS 区域允许的最大 API 请求率。这包括来自 AWS 命令行界面(AWS CLI)和 AWS 管理控制台的 API 调用。如果 API 请求超过最大速率,则会收到“已超出速率”错误,随后的 API 调用将受到限制。
Amazon EC2 Auto Scaling、AWS Auto Scaling 和 AWS Application Auto Scaling 都有自己的 API 限制桶。这意味着所有 Amazon EC2 Auto Scaling API 调用都有单一的共享 API 限制。Amazon EC2 Auto Scaling API 调用不会影响 AWS Application Auto Scaling API 的限制。
为避免“已超出速率”错误和限制,请确认应用程序仅进行必要的调用。
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新的 AWS CLI 版本。
解决方法
检查当前 Auto Scaling API 使用情况
要检查当前 Auto Scaling API 使用情况,请监控 EC2 Auto Scaling 服务的 Amazon CloudWatch 指标中的 AWS 使用情况统计数据。使用这些指标监控调用的 Auto Scaling API,并确定出现大量 API 调用或“已超出速率”错误的时间。然后,使用此信息来优化和减少 API 使用量。
验证“describe”调用
过多的 describe 调用会占据针对允许的请求速率衡量的 API 请求总数。确认应用程序 describe 调用都是必要的,并尽可能使用其他解决方案。例如,使用来自 Amazon EventBridge 的推送通知在实例更改状态时(例如,启动生命周期挂钩时)发送通知。
检查实例生命周期状态的应用程序不会进行 describe 调用。相反,这些应用程序会查询实例元数据。从实例元数据检索标签信息,包括自动扩缩组的名称。必须使用启动模板来启用实例的标签信息。
检查来自第三方应用程序的调用
第三方应用程序可能会连续调用 AWS 中的自动扩缩。查看第三方应用程序是否存在不必要的调用,并更新第三方应用程序的设置。
实现错误重试和指数回退
错误重试和指数回退可帮助限制 API 调用的速率。每个 AWS SDK 均实现自动重试逻辑和指数回退算法。有关详细信息,请参阅重试行为。
避免活动突增
避免导致 API 调用突增的情况。例如,当在 Amazon EC2 自动扩缩组中启动实例时,请勿将实例设置为启用横向缩减保护。默认情况下,为自动扩缩组启用该选项,以便所有实例都有保护。
请求提高服务配额
要增加服务配额,请从支持中心控制台申请增加配额。在提高服务限制部分下,完成以下步骤:
- 对于限制类型,选择自动扩缩。
- 对于自动扩缩服务,选择 EC2 Auto Scaling。
- 对于限制,选择 API 限制。
- 对于新限制值,选择不适用。
在请求中包括下面的信息:
- 验证 API 调用速率以及错误重试或指数回退方法的实现
- 与节流问题相关的区域和时间范围
- 自动扩缩 API 的完整工作流
- 预计何时 API 使用量达到峰值,例如在部署期间
有关详细信息,请参阅如何管理我的 AWS Service Quotas?
相关信息
Exponential backoff and jitter
AWS service quotas