use*_*614 6 amazon-web-services aws-lambda aws-step-functions
我在 AWS 中有一个状态机。我想限制任务(通过 lambda 创建)的并发性,以减少到我的下游 API 之一的流量。
我可以限制 lambda 并发,但任务因“Lambda.TooManyExecutions”失败而失败。有人可以分享一个简单的方法来限制 lambda 任务的并发性吗?
谢谢,维诺德。
您可以使用Map 状态并行运行这些任务,并使用最大并发设置来减少过多的 lambda 执行。
\n\n\nMap 状态(“Type”:“Map”)可用于为输入数组的每个元素运行一组步骤。并行状态使用相同的输入执行步骤的多个分支,而映射状态将为状态输入中数组的多个条目执行相同的步骤。
\n\n
\n- MaxConcurrency (可选) \nMaxConcurrency 字段\xe2\x80\x99s 值是一个整数,提供可并行运行的迭代器调用数量的上限。例如,MaxConcurrency 值为 10 将限制您的 Map 状态一次运行 10 个并发迭代。
\n
这应该会减少出现问题的可能性。也就是说,您仍然可以从为这些情况添加重试语句中受益。这是一个例子:
\n{\n "Retry": [ {\n "ErrorEquals": ["Lambda.TooManyRequestsException", "Lambda.ServiceException"],\n "IntervalSeconds": 2,\n "MaxAttempts": 6,\n "BackoffRate": 2\n } ]\n}\nRun Code Online (Sandbox Code Playgroud)\n如果您想控制不同执行之间的并发性,您必须自己实现某种单独的控制。为此准备状态机的一种方法是请求所需的数据,然后使用活动等待响应。
\n您可以使用提到的 lambda 并发,但随后向步骤函数添加重试子句,以便当您达到并发限制时,步骤函数会管理失败任务的重试。
\n\n\n\n\xe2\x80\x99s 重试次数有限制,但你可以定义它。
\n\n或者,如果您想无限制地重试,则可以在引发并发时使用 catch 进入等待状态。您也可以在上面的链接中阅读有关 catch 的内容。这里\xe2\x80\x99是一个等待状态文档。
\n\nhttps://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html
\n\n您只需在完成等待后将等待状态转换回任务状态。
\n| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |