教程 8:在控制台中调试错误 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程 8:在控制台中调试错误

在使用 Step Functions 时,可能会遇到由某些原因引起的运行时错误,原因示例如下:

  • Choice 状态中变量字段的 JSON 路径无效。

  • 状态机定义问题,例如没有为 Choice 状态匹配规则。

  • 应用筛选条件处理输入和输出时,JSON 路径表达式无效。

  • 由于 Lambda 函数异常导致任务失败。

  • IAM 权限错误。

在本教程中,您将学习如何使用 Step Functions 控制台调试其中一些错误。有关更多信息,请参阅Step Functions 中的错误处理

调试无效路径 Choice 状态错误

当您在 Choice 状态的变量字段中指定了不正确或无法解析的 JSON 路径,或者未在 Choice 状态中定义匹配规则时,您在运行工作流时会收到一个错误。

为了说明无效路径错误,本教程在您的工作流中引入了一个 Choice 状态错误。您将使用 CreditCardWorkflow 状态机并编辑其定义,引入错误。

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

  2. 选择编辑,编辑状态机定义。对状态机定义按照下方代码中突出显示的内容进行更改。

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$.Payload", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$.Payload", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }
  3. 选择保存,然后选择仍然保存

  4. 运行该状态机。

  5. 在状态机执行的“执行详细信息”页面上,执行下列操作之一:

    1. 在错误消息上选择原因,查看执行失败的原因。

    2. 在错误消息上选择显示步骤详细信息,查看导致错误的步骤。

  6. 步骤详细信息部分的输入和输出选项卡中,选择高级视图切换按钮,查看所选状态的输入和输出数据传输路径。

  7. 图表视图中,确保已选中 Credit applied >= 5000?,然后执行以下操作:

    1. 输入框中查看该状态机的输入值。

    2. 选择定义选项卡,注意为变量字段指定的 JSON 路径。

      Credit applied >= 5000? 状态的输入值是一个数值,而您已将该输入值的 JSON 路径指定为 $.Payload。在状态机执行期间,Choice 状态无法解析此 JSON 路径,因为该路径不存在。

  8. 编辑状态机,将变量字段值指定为 $

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }

在应用输入和输出筛选条件时调试 JSON 路径表达式错误

在使用输入和输出筛选条件时,您可能会遇到因指定了无效的 JSON 路径表达式而导致的运行时错误。

以下示例使用您在教程 5 中创建的 WorkflowInputOutput 状态机,并演示了使用 ResultSelector 筛选条件选择部分任务输出的场景。

  1. 应用 ResultSelector 筛选条件为验证身份步骤选择部分任务输出。为此,请按如下方式编辑状态机定义:

    { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity", "Payload": { "email": "jdoe@example.com", "ssn": "123-45-6789" } }, ... ... "ResultSelector": { "identity.$": "$.Payload.body.message" }", "End": true } } }
  2. 运行该状态机。

  3. 在状态机执行的“执行详细信息”页面上,执行以下操作:

    1. 在错误消息上选择原因,查看执行失败的原因。

    2. 在错误消息上选择显示步骤详细信息,查看导致错误的步骤。

  4. 在错误消息中,请注意 $.Payload.body 节点的内容是一个转义的 JSON 字符串。之所以出现此错误,是因为您无法使用 JSON 路径表示法引用字符串。

  5. 要引用 $.Payload.body.message 节点,请执行以下操作:

    1. 首先使用 States.StringToJSON 内置函数将字符串转换为 JSON 格式。

    2. 在内置函数中指定 $.Payload.body.message 节点的 JSON 路径。

      "ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
  6. 再次运行状态机。