AWS Step Functions允许您为活动任务定义超时,但限制了您可以使用的超时类型。例如,您无法指定一个超时,告诉Step Functions在活动任务未完成之前等待一定数量的时间。
而根据AWS文档,只有使用Lambda函数时,Step Functions才能使用任务超时,其他类型的任务无法使用任务超时(这个例子在Amazon官方文档中似乎存在错误)。因此,如果您使用非Lambda任务,最好使用其他方法来监视任务完成情况。
以下是一个示例演示如何使用Lambda来检测任务超时:
{
"Comment": "Check for idle tasks",
"StartAt": "WaitForTask",
"States": {
"WaitForTask": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
"Next": "ProcessTask",
"TimeoutSeconds": 60,
"HeartbeatSeconds": 5
},
"ProcessTask": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:activityFunction",
"Retry": [
{
"ErrorEquals": [
"Lambda.Unknown"
],
"IntervalSeconds": 60,
"MaxAttempts": 2,
"BackoffRate": 2
}
],
"End": true
}
}
}
在此示例中,WaitForTask状态上的Lambda函数等待waitForTaskToken。此函数将阻塞超时秒数,直到您提供任务标记。一旦Lambda收到任务标记,它将从等待状态退出,并将控制流转移到下一个状态(ProcessTask)。如果在超时时间内未收到任务标记,则此状态将退出,并且状态机将中止。请注意,如果Lambda函数在处理任务期间失败,则Step Functions将重