问题描述
我正在使用 AWS Step Function 创建一个工作流程,我首先检查数据库中是否存在记录,然后根据记录有两个分支,每个分支都以成功或失败状态结束,但我仍然得到Workflow has no end state
错误。
以下是工作流的 JSON
{
"Comment": "A demo state machine","StartAt": "FindCategory","States": {
"FindCategory": {
"Type": "Task","Resource": "arn:aws:lambda:us-east-1:xxxxxxx:function:xxxxxx","Next": "Exists?"
},"Exists?": {
"Type": "Choice","Choices": [
{
"Variable": "$.exists","BooleanEquals": true,"Next": "Yes"
},{
"Variable": "$.exists","BooleanEquals": false,"Next": "No"
}
]
},"Yes": {
"Type": "Pass","Next": "GetQuestions"
},"GetQuestions": {
"Type": "Task","Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx","Next": "ReplyWithPolls"
},"ReplyWithPolls": {
"Type": "Map","MaxConcurrency": 2,"Iterator": {
"StartAt": "SendPoll","States": {
"SendPoll": {
"Type": "Task","Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:xxxxxxx","Next": "SendPoll"
}
}
},"Next": "Succeed"
},"No": {
"Type": "Pass","Next": "FailState"
},"Succeed": {
"Type": "Succeed"
},"FailState": {
"Type": "Fail","Error": "404","Cause": "Category not found"
}
}
}
解决方法
我认为问题在于您的 SendPoll
状态会导致无限循环。它将自己称为下一个。相反,迭代器中的状态应该是终止状态。
将 "Next"
状态中的 "SendPoll"
字段替换为 "End"
字段。
"SendPoll": {
"Type": "Task","Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:xxxxxxx","End": true
}