Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
351 views
in Technique[技术] by (71.8m points)

amazon web services - Workflow has no terminal state

I am creating a workflow with AWS Step Function where I am first checking if a record exists in database, then based on the records there are two branches and each of them end at either Succeed or Failed state, but I am still getting Workflow has no end state error. Following is the JSON for workflow

{
  "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"
    }
  }
}
question from:https://stackoverflow.com/questions/65948012/workflow-has-no-terminal-state

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I believe the problem is that your SendPoll state results in an infinite loop. It references itself as next. Instead, the state in the iterator should be a terminal state.

Replace the "Next" field in "SendPoll" state with an "End" field.

          "SendPoll": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:xxxxxxx",
            "End": true
          }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...