amazon-web-services - 为什么 AWS 状态机不会将执行显示为“超时”,而是显示为“失败”?
问题描述
我们使用单个 AWS Lambda 步骤创建了一个最小状态机。然后将状态机描述符中步骤的超时时间设置为低值。
它随着超时正确终止,但结果是“失败”而不是“超时”。我想知道为什么?
重现步骤
创建一个简单的 Lambda 函数,这将是一个长时间运行的过程。为了简单起见,创建一个 Python 脚本并让函数休眠几秒钟:
import time def lambda_handler(event, context): time.sleep(10) # Delays for 10 seconds. return event
将 Lambda 函数的超时设置为 30 秒。(它实际上永远不会超时。)
创建一个简单的状态机,它将以 5 秒的超时时间调用此 Lambda:
{ "StartAt": "Execute Lambda", "States" : { "Execute Lambda" : { "Type" : "Task", "Resource": "arn:aws:lambda:eu-west-1:**********:function:helloWorld", "TimeoutSeconds" : 5, "Retry": [ { "ErrorEquals": ["States.ALL"], "MaxAttempts": 0 } ], "End" : true } } }
开始执行。
结果
根据“执行事件历史”,最后一个事件是“ExecutionFailed”,“错误”是“States.Timeout”。到目前为止,一切都很好。
但:
当您查看状态机的执行列表时,此执行的状态为“失败”。(预期:“超时”。)
当您查看状态机列表时,此执行会增加“失败”列中的计数器。(预期:增加“超时”列中的计数器。)
我猜想不知何故,执行结果没有正确“映射”,但找不到原因。或者,这只是基于 Lambda 的状态机步骤中的一个错误?!
解决方案
Step Function 中的 Timed Out 状态仅针对 Step Function 的执行时间(直到 1 年),您的 lambda 函数的超时状态是 State 的 Failed 事件。请记住,您可以在您的步进机器中创建一个状态“类型”:“等待”,这样您就可以节省运行可计费的 lambda 的时间。
推荐阅读
- python - Dash 的本地服务器不显示应用程序
- angular - Observable 导航返回后不会返回值
- sql - 最大分析函数加窗口排序未按预期工作
- node.js - 无法使用 npm 安装 firebase
- c++ - 为什么下面的 if 语句在它应该得到一个 false 值时执行?
- typescript-compiler-api - 获取类节点的隐式实现接口列表
- python - 在 DRF 中,用于验证和转换对模型对象的请求的逻辑应该放在哪里?
- node.js - 在循环在 node.js 中运行之前执行 for 循环之后的代码
- html - Html header 标签覆盖手机屏幕
- mongoose - 填充 Virtuals 似乎不起作用。谁能告诉我错误?