【发布时间】:2021-11-10 21:04:32
【问题描述】:
我附上了我的状态机的外观,并分享了定义以供参考。
Service Status Retry Wait 状态在调用 Service Status Retry 状态之前等待 60 秒,该状态调用 lambda 来检查服务是否在 Service Created? 状态下创建。
{
"Comment": "Step Function for Deployment",
"StartAt": "Start",
"States": {
"Start": {
"Type": "Pass",
"Next": "Service Status"
},
"Service Status": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Service Status Check",
"States": {
"Service Status Check": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-west-2:<acc-id>:function:<fn-name>",
"Payload": {
"stepFunctionState.$": "$$.State.Name",
"requestContext": {
"stepFunction": true,
"accountId": "<acc-id>"
},
"resource.$": "States.Format('{}/srvc', $$.Execution.Input.resource)",
"path.$": "States.Format('{}/srvc', $$.Execution.Input.path)",
"httpMethod": "POST",
"pathParameters.$": "$$.Execution.Input.pathParameters",
"body.$": "$$.Execution.Input.body",
"isBase64Encoded": false,
"headers": {},
"queryStringParameters": null
}
},
"ResultPath": "$.taskresult",
"Next": "Service Created?"
},
"Service Created?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.taskresult.Payload.body",
"StringMatches": "*\"isCreated\": \"false\"*",
"Next": "Service Status Retry Wait"
},
{
"Variable": "$.taskresult.Payload.body",
"StringMatches": "*\"isCreated\": \"true\"*",
"Next": "Service Status Check End"
}
],
"Default": "Service Status Retry Wait"
},
"Service Status Retry Wait": {
"Type": "Wait",
"Seconds": 60,
"Next": "Service Status Retry"
},
"Service Status Retry": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-west-2:<acc-id>:function:<func-name>",
"Payload": {
"stepFunctionState.$": "$$.State.Name",
"requestContext": {
"stepFunction": true,
"accountId": "<acc-id>"
},
"resource.$": "States.Format('{}/srvc', $$.Execution.Input.resource)",
"path.$": "States.Format('{}/srvc', $$.Execution.Input.path)",
"httpMethod": "POST",
"pathParameters.$": "$$.Execution.Input.pathParameters",
"body.$": "$$.Execution.Input.body",
"isBase64Encoded": false,
"headers": {},
"queryStringParameters": null
}
},
"ResultPath": "$.taskresult",
"Next": "Service Created?"
},
"Service Status Check End": {
"Type": "Pass",
"End": true
}
}
}
],
"Next": "End"
},
"End": {
"Type": "Pass",
"End": true
}
}
}
直到和除非服务被创建,这个状态机一直在循环中进行。我想知道是否有办法在重试 5 次后打破循环并退出。它可以在 Service Status Retry Wait 或 Service Status Retry 被调用 5 次之后。
或者,如果有办法知道它现在已经循环了 1 小时并基于此退出。以上两个选项中的任何一个都应该适合我。
【问题讨论】:
-
看来您可以使用 Step Functions 内置的错误/重试功能,而不是为此 docs.aws.amazon.com/step-functions/latest/dg/…重新创建自己的逻辑
-
它解释了错误后重试。但是,就我而言,我不希望出现错误。我需要在我的重试状态执行 5 次后停止。
-
我的意思是您可以配置检查服务状态的代码,以便在服务尚未启动时抛出错误。然后,您将能够利用 Step Functions 提供的此内置重试处理功能。
标签: amazon-web-services aws-step-functions