【问题标题】:How to transit from Choice State Step Function?如何从选择状态阶跃函数过渡?
【发布时间】:2020-04-23 23:39:08
【问题描述】:

从先前状态发送的输入是这种形式:

  [
{
"bucketName": "test-heimdall-employee-data",
"executionId": "ca9f1e5e-4d3a-4237-8a10-8860bb9d58be_1586771571368",
"feedType": "lenel_badge",
"chunkFileKeys": "chunkFileLocation/lenel_badge/68ac7180-69a0-401a-b30c-8f809acf3a1c_1586771581154.csv",
"sanityPassFileKeys": "chunkFileLocation/lenel_badge/0098b86b-fe3c-45ca-a067-4d4a826ee2c1_1586771588882.json"
},
  {
"bucketName": "test-heimdall-employee-data",
"executionId": "ca9f1e5e-4d3a-4237-8a10-8860bb9d58be_1586771571368",
"feedType": "lenel_badge",
"errorFilePath": "error/lenel_badge/2a899128-339d-4262-bb2f-a70cc60e5d4e/1586771589234_2e06e043-ad63-4217-9b53-66405ac9a0fc_1586771581493.csv",
"chunkFileKeys": "chunkFileLocation/lenel_badge/2e06e043-ad63-4217-9b53-66405ac9a0fc_1586771581493.csv",
"sanityPassFileKeys": "chunkFileLocation/lenel_badge/f6957aa7-6e22-496a-a6b8-4964da92cb73_1586771588793.json"
  },
 {
"bucketName": "test-heimdall-employee-data",
"executionId": "ca9f1e5e-4d3a-4237-8a10-8860bb9d58be_1586771571368",
"feedType": "lenel_badge",
"errorFilePath": "error/lenel_badge/8050eb12-c5e6-4ae9-8c4b-0ac539f5c189/1586771589293_1bb32e6c-03fc-4679-9c2f-5a4bca46c8aa_1586771581569.csv",
"chunkFileKeys": "chunkFileLocation/lenel_badge/1bb32e6c-03fc-4679-9c2f-5a4bca46c8aa_1586771581569.csv",
"sanityPassFileKeys": "chunkFileLocation/lenel_badge/48960b7c-04e0-4cce-a77a-44d8834289df_1586771588870.json"
  }
  ]

状态机工作流程设计:

如何从上述输入中提取“feedType”值并转换到下一个状态,并将整个输入传递到下一个状态?

谢谢

【问题讨论】:

    标签: amazon-web-services aws-step-functions serverless-framework-step-functions


    【解决方案1】:

    您可以使用 $$.Execution.Input.todo 访问您启动状态机时使用的输入 JSON。除此之外,您不能直接从一步到下一步访问先前的状态。

    例如,假设您有A->B->C 假设您通过A 提供了一个新字段:a : 1,然后您通过B 并返回b : 2,当您到达C 时,您将只有b : 2。但如果B 也返回a : 1,那么您将在C 获得{a : 1, b : 2}。这通常是您在前几步传递状态的方法。

    人们还会做其他事情,例如将数据存储在 s3 存储桶中并在不同阶段访问该存储桶。您也可以查询阶跃函数,但这可能会很麻烦。

    其他 hack 包括在并行块中添加 pass 步骤,但这些 hack 并不好,正确的方法是在您的步骤之间传递数据,或者希望在您的执行输入中有您需要的内容。

    【讨论】:

      【解决方案2】:

      查看您之前的状态输入,看起来feed_type 是一个常量。假设您的整个输入的关键是“输入”,所以它是像 {"input":[{...},{...}]} 这样的字典。因此,要访问feed_type 的值,您只需执行$.input[0].feed_type

      默认情况下,选择状态会将传递给它的整个输入传递到下一个阶段。因此,无论进入下一阶段,该阶段都将具有传递给选择状态的相同输入。

      为了更好地理解它或作为概念证明检查下面的 Step Function,其中 Hello 状态是 choice 状态,其他 2 个状态是简单的通过状态。

      如果你会看到下面的 inputoutput 的选择状态。 相同

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2012-10-16
        • 1970-01-01
        • 2022-01-18
        • 2020-03-14
        • 2021-04-12
        • 2019-02-21
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多