【发布时间】:2019-07-27 22:18:18
【问题描述】:
我们使用单个 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 的状态机步骤中的一个错误?!
【问题讨论】:
标签: amazon-web-services aws-lambda aws-step-functions