繁体   English   中英

如何将参数从一个 Pass state 传递给另一个?

[英]How to pass parameters from one Pass state to another?

如何将参数从一个 Pass state 传递给另一个? aws_stepfunctions.JsonPath.string_at在调用 lambda function(包括aws_stepfunctions.TaskInput.from_object )时工作正常,但它不适用于 Pass state(在aws_stepfunctions.Result.from_object内)

我有:

initial_pass = aws_stepfunctions.Pass(
    self,
    "initial_pass",
    result=aws_stepfunctions.Result.from_object(
         {
            "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
            "globals": {
                "start_datetime": "2023-01-01",
                 "end_datetime": "",
                 "upload_start_datetime": "",
                 "upload_end_datetime": "",
                 "device_details": {},
            },
         }
   )
)

second_pass = aws_stepfunctions.Pass(
    self,
    "second_pass",
    result=aws_stepfunctions.Result.from_object(
       {
           "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
           "globals": aws_stepfunctions.JsonPath.string_at("$.globals"),
       }
    ),
)

我得到的是 output:

{
  "iterator": {
    "count": 5,
    "index": 0,
    "step": 1,
    "continue": true
  },
  "globals": "$.globals"
}

问题是因为aws_stepfunctions.JsonPath.string_at方法返回一个字符串,而不是引用路径的实际值。

要解决它,请尝试提取initial_pass中引用的值并将其作为参数传递给second_pass

像这样:

initial_pass = aws_stepfunctions.Pass(
    self,
    "initial_pass",
    result=aws_stepfunctions.Result.from_object(
         {
            "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
            "globals": {
                "start_datetime": "2023-01-01",
                 "end_datetime": "",
                 "upload_start_datetime": "",
                 "upload_end_datetime": "",
                 "device_details": {},
            },
         }
   )
)

globals = initial_pass.result["globals"]

second_pass = aws_stepfunctions.Pass(
    self,
    "second_pass",
    result=aws_stepfunctions.Result.from_object(
       {
           "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
           "globals": globals,
       }
    ),
)

编辑:

似乎AWS Step Functions的Pass state不支持result属性。

作为解决方法,您可以将initial_pass state 的结果作为输入传递给second_pass state,然后使用 JsonPath 提取所需的字段。

删除行:

globals = initial_pass.result["globals"]

second_pass替换为:

second_pass = aws_stepfunctions.Pass(
    self,
    "second_pass",
    input_path=aws_stepfunctions.JsonPath.string_at("$.result"),
    result=aws_stepfunctions.Result.from_object(
        {
            "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
            "globals": aws_stepfunctions.JsonPath.string_at("$.globals"),
        }
    ),
)

TL;DR使用parameters arg 而不是result


Pass State Result字段只接受 static 值。 它不执行 JSONPath 替换,也不支持内部函数。

Parameters域允许转换 它用新的键值对覆盖先前状态的输入。 这些值可以包括 JSONPath 替换和内部函数。

second_pass = aws_stepfunctions.Pass(
    self,
    "second_pass",
    parameters={
        "iterator": {"count": 5, "index": 0, "step": 1, "continue": True},
        "globals": aws_stepfunctions.JsonPath.string_at("$.globals"),
    },
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM