本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Step Functions 状态机中处理错误情况
在本教程中,您将创建一个具有任务 AWS Step Functions 状态的状态机,该状态机调用为抛出自定义错误而构建的示例 Lambda 函数。
任务是其中之一回退状态,您可以为其配置字Catch
段。当集成收到错误时,catch 字段会根据错误名称选择后续步骤。
步骤 1:创建会引发错误的 Lambda 函数
使用 Lambda 函数来模拟错误情形。
-
打开 AWS Lambda 控制台,网址为https://console.aws.amazon.com/lambda/
。 -
选择创建函数。
-
选择使用蓝图
Step Functions
,搜索并选择抛出自定义错误。 -
对于函数名称,请输入
ThrowErrorFunction
。 -
对于 Role (角色),选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)。
-
选择创建函数。
以下代码应显示在代码窗格中。
export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };
第 2 步:测试您的 Lambda 函数
在创建状态机之前,请验证您的 Lambda 函数在调用时是否会抛出。CustomError
-
选择测试选项卡。
-
选择创建新事件并保留默认的事件 JSON
-
选择 Test 以使用测试事件调用您的函数。
-
展开 “执行函数” 以查看抛出的错误的详细信息。
现在,您已准备好抛出自定义错误的 Lambda 函数。
在下一步中,您将设置一个状态机来捕获并重试该错误。
第 3 步:创建您的状态机
使用 Step Functions 控制台创建使用Task 工作流程状态带有Catch
配置的状态机。状态机将调用 Lambda 函数,您构建该函数是为了模拟在调用该函数时抛出错误。Step Functions 在两次重试之间使用指数退避来重试该函数。
-
打开 Step Functions 控制台
,从菜单中选择状态机,然后选择创建状态机。 -
选择 “从空白处创建”,然后在 “状态机名称” 中输入
CatchErrorStateMachine
。 -
接受默认类型(标准),然后选择 “继续”,在 Workflow Studio 中编辑状态机。
-
选择 “代码” 以切换到 ASL 编辑器,然后将代码替换为以下状态机定义:
{ "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:
region
:account-id
:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }
步骤 4:配置状态机
在运行状态机之前,必须先连接到之前创建的 Lambda 函数。
-
切换回设计模式并选择名为 Lambda: Invoke 任务状态。CreateAccount
在 “配置” 选项卡上,查找 API 参数。对于函数名称,请选择您之前创建的 Lambda 函数。
选择创建,查看角色,然后选择确认以创建您的状态机。
第 5 步:运行状态机
创建和配置状态机后,您可以运行状态机并检查流程。
-
在编辑器中,选择 “执行”。
或者,从 “状态机” 列表中选择 “开始执行”。
-
在 “开始执行” 对话框中,接受生成的 ID,然后在 “输入” 中输入以下 JSON:
{ "Cause" : "Custom Function Error" }
-
选择启动执行。
Step Functions 控制台将您引导至标有您的执行 ID 的页面,即执行详情页面。您可以随着工作流程的进展和完成后查看执行结果。
要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详细信息概览。
您的状态机调用 Lambda 函数,该函数会抛出。CustomError
在图表视图中选择CreateAccount步骤以查看状态输出。您的状态机输出应与下图类似:

恭喜您!
你现在有了可以捕捉和处理 Lambda 函数引发的错误条件的状态机。您可以使用这种模式在工作流程中实现强大的错误处理。
注意
您还可以创建在超时情况下执行重试的状态机,或者创建使用 Catch
在出错或超时情况下转换为特定状态的状态机。有关这些错误处理技术的示例,请参阅使用 Retry 和使用 Catch 示例。