AWS Step中是否有一种方法可以将输出从一个状态映射到下一个状态的输入,而不是InputPath
,OutputPath
,ResultPath
?
e.g。第一个州的输出示例:
{
"status": "1",
"body": {
"access_token":"example_token"
}
}
下一个州希望输入以下表格:
{
"method": "foo",
"payload": {
"access_token":<my_access_token>,
"other_key":"other_value"
},
"other_params":["a","b","c"]
}
目前尚不清楚如何将1状态的输出任意映射到另一状态的输入。唯一的解决方案似乎是重写Lambdas。
基本上我需要这样的东西:
"Remap": {
"Type": "Pass",
"Result": {
"method":"foo",
"payload":{
"access_token":"$.body.access_token",
"other_key":"other_value"
},
"other_params":["a","b","c"]
},
"Next": "NextStage"
},
答案 0 :(得分:0)
我认为目前没有一种很好的通用方法可以在州语言中操纵JSON。如你所说,如果Pass的“Result”值更具表现力,那将会很有用。
您可以创建一个中间步骤lambda,生成您需要的JSON。令人沮丧的是,如果你做了类似“set-json-path”活动的通用,那么调用它是不实用的,因为你需要一个额外的Pass步骤来设置它的参数,并且它们必须被添加到其余的输入中。状态语言似乎需要一种方法来使用自己的输入/输出来执行“子机器”。
使用Parallel几乎可以获得此功能但不幸的是结果总是在数组中。这个几乎可以工作,但它将access_token放在一个数组中,而不仅仅是一个字符串:
{
"StartAt": "Setup",
"States": {
"Setup": {
"Type": "Pass",
"Result": {
"method":"foo",
"payload":{
"other_key":"other_value"
},
"other_params":["a","b","c"]
},
"Next": "Step1"
},
"Step1": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "GetToken",
"States": {
"GetToken": {
"Type": "Pass",
"Result": {
"status": "1",
"body": {
"access_token":"example_token"
}
},
"OutputPath": "$.body.access_token",
"End": true
}
}
}
],
"ResultPath": "$.payload.access_token",
"Next": "Step2"
},
"Step2": {
"Type": "Task",
"Resource": "arn:....foo",
"End": true
}
}
}
收率:
{
"output": {
"method": "foo",
"payload": {
"other_key": "other_value",
"access_token": [
"example_token"
]
},
"other_params": [
"a",
"b",
"c"
]
}
}
在您的情况下,我认为最简单的方法是修改您的第一个lambda任务,只返回您可以使用ResultPath": "$.payload.access_token"
设置的访问令牌字符串。不幸的是,状态机与每个状态的输入和输出之间存在紧密耦合(以及并行状态数组中的顺序,这使我无所不在。)