我们创建了具有单个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"one_answers"错误"是" states.timeout"。到目前为止,一切都很好。
但是:
-
当您查看状态计算机的执行列表时,该执行的状态"失败"。(预期:"超时"。)
-
当您查看状态计算机的列表时,此执行会增加"失败"列中的计数器。(预期:增加"定时"列中的计数器。)
我猜想以某种方式无法正确地"映射"执行结果,但找不到原因。或者,这只是基于lambda的状态机步骤中的错误?!
与状态计算机执行相关的五个状态。
- 运行
- 成功
- 失败
- 中止
- 超时
执行可以运行长达1年。如果状态机器中执行中的一个州之一,则执行失败,不会超时。但是,如果执行运行超过1年,则会看到状态"定时出局"。
请参阅步骤函数限制。
如果执行的运行超过1年限制,则会失败 actest.timeout错误并发出executionStimeDout CloudWatch 公制。
步骤函数中的时间输出状态仅用于步骤函数的执行时间(直到1年),lambda函数的超时状态是状态的失败事件。请记住,您可以在步骤计算机中创建状态"类型":"等待",这样可以节省运行可计费的时间。