[英]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.