我正在使用 API 网关,并且有一个将数据传递给 Step 函数的服务。
步骤函数需要以下格式的 JSON 输入:
{
"input":"",
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}
我目前正在以手动方式传递阶段变量,即
#set($data = $util.escapeJavaScript($input.json('$')))
{
"input": "{
"input": $data,
"stageVariables" : {
"clientId": "${stageVariables.clientId}",
"clientSecret": "${stageVariables.clientSecret}",
"password": "${stageVariables.password}" },
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}
我知道在默认映射模板中,您可以使用这样的东西来循环访问阶段变量并生成 JSON:
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
}
但是,步进函数所需的 JSON 略有不同。如何将所有阶段变量转换为 JSON 格式,而无需手动显式添加每个变量?
谢谢
下面是有效的解决方案。似乎模板对换行符非常敏感,请注意下面的代码总共由 5 行组成。
#set($data = $util.escapeJavaScript($input.json('$')))
{
"input": "{ "input": $data, "stageVariables" : { #foreach($key in $stageVariables.keySet()) "$key" : "$util.escapeJavaScript($stageVariables.get($key))" #if($foreach.hasNext),#end #end } }",
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}
我认为这应该有效,但我没有测试它。我只是简单地复制了您那里的 foreach 块并内联转义了引号。
#set($data = $util.escapeJavaScript($input.json('$')))
{
"input": "{
"input": $data,
"stageVariables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
},
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}