使用状态机处理 Step Functions 函数错误情形 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用状态机处理 Step Functions 函数错误情形

在本教程中,您将创建一个带有回退状态字段的 Amazon Step Functions 状态机。该Catch字段使用 Amazon Lambda 函数根据错误消息类型使用条件逻辑进行响应。这是一种称为函数错误处理 的技术。

有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Node.js 中的 Amazon Lambda 函数错误

注意

您还可以创建在超时情况下执行重试的状态机,或者创建使用 Catch 在出错或超时情况下转换为特定状态的状态机。有关这些错误处理技术的示例,请参阅使用 Retry 和使用 Catch 示例

第 1 步:创建一个失败的 Lambda 函数

使用 Lambda 函数来模拟错误情形。

重要

确保您的 Lambda 函数与状态机位于同一个 Amazon 账户和 Amazon 区域下。

  1. 打开 Amazon Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/

  2. 选择创建函数

  3. 选择使用蓝图,在搜索框中输入 step-functions,然后选择抛出自定义错误蓝图。

  4. 对于 Function name(函数名称),请输入 FailFunction

  5. 对于角色,保留默认选择(使用基本 Lambda 权限创建新角色)。

  6. 以下代码显示在 Lambda 函数代码窗格中。

    exports.handler = async (event, context) => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };

    context 对象返回错误消息 This is a custom error!

  7. 选择创建函数

  8. 创建 Lambda 函数后,复制页面右上角显示的该函数的 Amazon 资源名称 (ARN)。要复制 ARN,请单击 
                                copy Amazon Resource Name
                            。以下是示例 ARN:

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  9. 选择部署

第 2 步:测试 Lambda 函数

测试您的 Lambda 函数以查看其运行情况。

  1. FailFunction页面上,选择 “测试” 选项卡,然后选择 “测试”。您无需创建测试事件。

  2. 执行结果下,展开详细信息以查看测试结果(模拟的错误)。

第 3 步:创建使用 Catch 字段的状态机

通过 Step Functions 控制台创建使用 Task 状态和 Catch 字段的状态机。在 Task 状态中添加对您 Lambda 函数的引用。状态机调用 Lambda 函数,该函数将在执行过程中失败。Step Functions 重试函数两次,在两次重试之间使用指数回退。

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 选择模板对话框中,选择空白

  3. 选择选择。这将在设计模式中打开 Workflow Studio。

  4. 选择代码,打开代码编辑器。在代码编辑器中,您可以编写和编辑工作流的 Amazon States Language (ASL) 定义。

  5. 粘贴以下代码,但要替换之前在 Resource 字段中创建的 Lambda 函数的 ARN。

    { "Comment": "A Catch example of the Amazon States Language using an Amazon Lambda function", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback" }, { "ErrorEquals": ["States.TaskFailed"], "Next": "ReservedTypeFallback" }, { "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" } ], "End": true }, "CustomErrorFallback": { "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true }, "ReservedTypeFallback": { "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true }, "CatchAllFallback": { "Type": "Pass", "Result": "This is a fallback from any error code", "End": true } } }

    这是使用 Amazon States Language 的状态机的说明。它定义了名为 CreateAccount 的单个 Task 状态。有关更多信息,请参阅状态机结构

    有关 Retry 字段的语法的更多信息,请参阅使用 Retry 和使用 Catch 的状态机示例

    注意

    Lambda 中未处理的错误在错误输出中报告为 Lambda.Unknown。其中包括 out-of-memory 错误和函数超时。您可以匹配 Lambda.UnknownStates.ALLStates.TaskFailed 来处理这些错误。当 Lambda 达到最大调用次数时,会出现 Lambda.TooManyRequestsException 错误。有关 Lambda 函数错误的更多信息,请参阅《Amazon Lambda 开发者指南》中的错误处理和自动重试

  6. (可选)在图表可视化窗格中,查看工作流的实时图形可视化。

  7. 为状态机指定一个名称。为此,请选择默认状态机名称旁边的编辑图标MyStateMachine。然后,找到状态机配置,在状态机名称框中指定一个名称。

    在本教程中,请输入 Catchfailure

  8. (可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。

    在本教程中,请保留状态机设置中的所有默认选项。

  9. 确认角色创建对话框中,选择确认继续。

    您也可以选择查看角色设置,返回至状态机配置

    注意

    如果您删除了 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建该角色。同样,如果您修改了该角色(例如,通过在 IAM 策略中从主体中删除 Step Functions),Step Functions 在以后也无法还原其原始设置。

第 4 步:运行状态机

在创建状态机后,便可以运行它。

  1. 状态机页面上,选择 Catchfailure

  2. Catchfailure 页面上,选择启动执行。随即显示启动执行对话框。

  3. 启动执行对话框中,执行以下操作:

    1. (可选)要识别您的执行,您可以在名称框中为其指定一个名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

      注意

      Step Functions 允许您为状态机、执行、活动、速率控制和包含非 ASCII 字符的标签创建名称。这些非 ASCII 名称不适用于亚马逊。 CloudWatch为确保您可以跟踪 CloudWatch 指标,请选择一个仅使用 ASCII 字符的名称。

    2. (可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。

    3. 选择启动执行

    4. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅“执行详细信息”页面 – 界面概述

    例如,要查看您的自定义错误消息,请在图表视图中选择CreateAccount步骤,然后选择输出选项卡。

    
                            错误输出
    注意

    可以通过使用 ResultPath 来保留状态输入以及错误。请参阅 ResultPath 用于在 a 中同时包含错误和输入 Catch