由于超过运动速率限制,Cloudformation 失败

Posted

技术标签:

【中文标题】由于超过运动速率限制,Cloudformation 失败【英文标题】:Cloudformation failure due to kinesis rate limit exceeded 【发布时间】:2022-01-22 19:51:42 【问题描述】:

我们有一个 AWS Lambda SAM 模板在 Cloudformation 堆栈创建/更新期间偶尔会失败,原因是:

Invalid request provided: Received Exception while reading from provided stream. Rate exceeded for shard shardId-000000000000

在 SAM 模板中,10 个 Lambda 函数(Lambda 的 Kinesis 事件源)附加到具有 10 个分片的同一个 Kinesis Stream。

有没有人可能会导致这个问题?我没有看到附加到单个 Kinesis 流的 Lambda 数量有任何限制

【问题讨论】:

你的模板是什么? 【参考方案1】:

如果在您更新堆栈时发生这种情况,您可能会遇到以下配额之一:

DescribeStream 限制为每个帐户每秒 10 次交易。 GetShardIterator 限制为每个分片每秒 5 个事务。

这两个 API 调用都需要 Lambda 从流中读取,并且几乎肯定会在创建事件触发器时发生。

我不确定您当前的架构是否有保证的解决方案,但一种可能性是使用 DependsOn 链接 Lambda 和触发器的创建。创建这些资源所花费的时间应使 API 调用率低于限制。

如果这不起作用,您将不得不使用enhanced fan-out(您可能仍然需要它,具体取决于通过流推送的数据量)。但是,这并不能解决DescribeStream 配额的问题。

【讨论】:

感谢您使用dependsOn的详细回答,这是一个非常好的主意!

以上是关于由于超过运动速率限制,Cloudformation 失败的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Twitter API 用于超过 REST 速率限制的大型 Web 应用程序

Python 请求,如何限制接收大小、传输速率和/或总时间?

aiohttp:限制并行请求的速率

Instagram 速率限制

速率限制的一些思考

如何使用 CloudFormation 定义 ECR 生命周期策略