数据流模拟器 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

数据流模拟器

您可以在 Step Functions 控制台中设计、实施和调试工作流。您还可以使用 JsonPath 输入和输出数据处理来控制工作流中的数据流。使用数据流模拟器,您可以模拟工作流中的 任务状态 状态在运行时处理数据的顺序。使用模拟器,您可以了解如何在数据从一种状态流向另一种状态时对其进行筛选和操作。它能够模拟 Step Functions 用来处理和控制 JSON 数据流的以下每个字段:

InputPath

选择将整个输入有效负载的哪个 部分用作任务的输入。如果您指定了此字段,Step Functions 将首先应用此字段。

参数

指定在调用任务之前输入的外观。使用 Parameters 字段,您可以创建一个键值对的集合,这些键值对作为输入传递给 Amazon Web Service集成(例如 Amazon Lambda 函数)。这些值可以是静态的,也可以从状态输入或工作流上下文对象中动态选择。

ResultSelector

确定从任务的输出中选择什么。使用 ResultSelector 字段,您可以创建一个键值对的集合,这些键值对用于替换状态的结果并将该集合传递给 ResultPath

ResultPath

确定任务输出的放置位置。使用 ResultPath 来确定状态的输出是其输入的副本、其产生的结果还是两者的组合。

OutputPath

确定发送到下一个状态的内容。使用 OutputPath,您可以筛选出不需要的信息,并且仅传递所需的 JSON 数据。

使用数据流模拟器

模拟器可在您应用输入和输出数据处理字段之前和之后,对您的数据进行实时、并排的比较。要使用模拟器,请指定一个 JSON 输入。然后,通过每个输入和输出处理字段对其进行评估。模拟器会自动验证您的 JSON 输入并突出显示所有语法错误。

使用数据流模拟器的操作步骤

在以下步骤中,您将提供 JSON 输入并应用 InputPath参数 字段。您还可以应用其他可用字段并查看其输出。

  1. 打开 Step Functions 控制台

  2. 在导航窗格中,选择数据流模拟器

  3. 状态输入区域中,将预先填充的示例 JSON 数据替换为以下 JSON 数据。然后选择下一步

    { "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" } } }
  4. InputPath 中,输入 $.data.address,选择输入 JSON 数据的地址节点。

    InputPath 之后的状态输入框将显示以下结果。

    { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }
  5. 选择下一步

  6. 应用 Parameters 字段将生成的 JSON 数据转换为字符串。要转换数据,请执行以下操作:

    1. 参数框中,输入以下代码,创建名为 addressString 的字符串。

      { "addressString.$": "States.Format('{}. {}, {} - {}', $.street, $.city, $.state, $.zip)" }
  7. 参数之后的已筛选输入框中查看 Parameters 字段应用的结果。

使用数据流模拟器的注意事项

在使用数据流模拟器之前,请考虑其局限性,包括但不限于:

  • 不受支持的筛选表达式

    模拟器中的筛选表达式的行为方式与 Step Functions 服务中的筛选表达式不同。这包括使用以下语法的表达式:[?(expression)]. 以下是不受支持的表达式列表。如果使用这些表达式,在评估后可能不会返回预期的结果。

    • $..book[?(@.isInStock==true)]

    • $..book[?(@.price > 10.0)].title

  • 单项数组的 JsonPath 评估不正确

    如果您使用返回单个数组项的 JsonPath 表达式筛选数据,则模拟器会返回不带数组的项目。例如,考虑以下数据数组,名为 items

    { "items": [ { "name": "shoe", "color": "blue", "comment": "nice shoe" }, { "name": "hat", "color": "red" }, { "name": "shirt", "color": "yellow" } ] }

    给定这个 items 数组,如果您在 InputPath 字段中输入 $..comment,您会得到以下输出:

    [ "nice shoe" ]

    但是,数据流模拟器会返回以下输出:

    "nice shoe"

    对于包含多个项目的数组的 JSONPath 评估,模拟器会返回预期输出。