1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
templ = {
"Comment": "A state machine that initially fails a condition and then succeeds upon retry.",
"StartAt": "SetupInitialCondition",
"States": {
"SetupInitialCondition": {
"Type": "Pass",
"Comment": "Setup an initial failing condition for the HelloWorld task.",
"Result": {"status": "incomplete"},
"ResultPath": "$",
"Next": "TaskStateCatchRetry",
},
"TaskStateCatchRetry": {
"Type": "Task",
"Resource": "arn:aws:lambda:your-region:your-account-id:function:yourHelloWorldFunction",
"Comment": "Invoke a Lambda function that returns its input. Initially set to fail.",
"Next": "IsComplete",
"Catch": [
{
"ErrorEquals": ["States.TaskFailed"],
"Next": "FailState",
"Comment": "Catch task failures and move to the FailState.",
}
],
"Retry": [
{
"ErrorEquals": ["States.ALL"],
"IntervalSeconds": 3,
"MaxAttempts": 1,
"BackoffRate": 1.0,
"Comment": "Retry policy for any error. Adjusted for demonstration.",
}
],
},
"IsComplete": {
"Type": "Choice",
"Comment": "Decide the next state based on the Lambda function's output.",
"Choices": [
{
"And": [
{
"Variable": "$.status",
"StringEquals": "complete",
"Comment": "If task is complete, move to the SuccessState.",
}
],
"Next": "SuccessState",
}
],
"Default": "WaitState",
},
"WaitState": {
"Type": "Wait",
"Seconds": 5,
"Comment": "Wait for a few seconds before correcting the condition and retrying.",
"Next": "CorrectCondition",
},
"CorrectCondition": {
"Type": "Pass",
"Comment": "Correct the condition to ensure success in the next HelloWorld task attempt.",
"Result": {"status": "complete"},
"ResultPath": "$",
"Next": "TaskStateCatchRetry",
},
"SuccessState": {
"Type": "Succeed",
"Comment": "The state machine completes successfully.",
},
"FailState": {
"Type": "Fail",
"Error": "TaskFailed",
"Cause": "The Lambda function task failed.",
"Comment": "The state machine fails due to a task failure.",
},
},
}
|