我在 Amazon Route 53 中遇到了 API 节流错误。
简短描述
对 Route 53 执行批量 API 调用时,可能会出现 **HTTP 400(错误请求)**错误。
如果响应标头的代码元素值为节流,消息元素值为超出速率,则表明出现了速率节流的情况。当 API 请求数量大于每个账户每秒五个请求的硬性限制时,就会出现速率节流的情况。
如果 Route 53 无法在下一个针对同一托管区域的请求之前处理该错误请求,则后续请求将遭到拒绝,并再次出现 HTTP 400 错误。响应标头包含以下两个元素:
- 值为 PriorRequestNotComplete 的代码元素
- 值为请求遭到拒绝,因为 Route 53 仍在处理先前请求的消息元素。
来自同一账户中的 AWS Identity and Access Management(IAM)用户的 API 调用计入该账户的全球速率节流限制。来自这些 IAM 用户的 API 调用也会影响从 AWS 管理控制台发出的 API 调用。
解决方法
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
为避免出现速率节流的情况,请使用以下任一方法:
批处理请求
要减少 API 调用,请使用 AWS CLI 或您的首选 SDK 将相同类型的单个操作归为一个批量更改操作。
例如,通过一个批处理操作来请求 CREATE、DELETE 或 UPSERT(更新并插入)多条记录。在 AWS CLI 中使用 change-resource-record-sets 命令执行批量资源记录操作。
注意:
- UPSERT 请求数量翻倍计算。
- change-resource-record-sets API 调用中的元素和字符有一定限额。
使用错误重试和指数回退功能
为避免节流,请在 Route 53 API 调用中添加错误重试和指数回退功能。例如,使用简单的指数回退算法,在 2^i 秒内重试呼叫,其中 i 是重试次数。
随机化起始时间
随机分配调用 Route 53 API 的起始时间。确保没有多个应用程序同时处理逻辑。同步请求可能会导致节流。
在两次调用之间引入“休眠时间”
如果代码函数连续调用 Route 53 API,则在两次调用之间增加“休眠时间”以最大限度地降低节流风险。