有没有办法将请求的 header 和 body 传递到 aws step 函数管道?
Is there a way to passthrough header and body of a request to aws step function pipeline?
我目前遇到请求直通问题。我需要使用阶跃函数管道处理来自 header 以及请求的 body 的信息。我正在使用 REST API 网关,它在集成请求中具有以下映射模板
#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"
}
但这不起作用。如果我用 lambda 事件访问 header ,那将是
事件['headers']['Authorization']
但是我只得到我请求的 body 作为我的步骤函数的输入。
当我对整个请求使用数据流模拟器,然后将 JsonPath 放入我的状态机模板时,它仍然没有给我 header 和 body 作为输入。
有人可以帮我解决这个问题吗?
调整此 VTL 请求映射模板* 以将请求数据添加到状态机输入。
- 将
%STATEMACHINE%
替换为您的状态机的 ARN
- 可选择将
$includeHeaders
、$includeQueryString
或 $includePath
设置为 false
。
- 可选择将
$requestContext
设置为 context key-value pairs。使用 @@
而不是引号,如 "{@@user@@:@@$context.identity.user@@}"
.
## Velocity Template used for API Gateway request mapping template
## "@@" is used here as a placeholder for '"' to avoid using escape characters.
#set($includeHeaders = true)
#set($includeQueryString = true)
#set($includePath = true)
#set($requestContext = '')
#set($inputString = '')
#set($allParams = $input.params())
{
"stateMachineArn": "%STATEMACHINE%",
#set($inputString = "$inputString,@@body@@: $input.body")
#if ($includeHeaders)
#set($inputString = "$inputString, @@header@@:{")
#foreach($paramName in $allParams.header.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.header.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
#if ($includeQueryString)
#set($inputString = "$inputString, @@querystring@@:{")
#foreach($paramName in $allParams.querystring.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.querystring.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
#if ($includePath)
#set($inputString = "$inputString, @@path@@:{")
#foreach($paramName in $allParams.path.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.path.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
## Check if the request context should be included as part of the execution input
#if($requestContext && !$requestContext.empty)
#set($inputString = "$inputString,")
#set($inputString = "$inputString @@requestContext@@: $requestContext")
#end
#set($inputString = "$inputString}")
#set($inputString = $inputString.replaceAll("@@",'"'))
#set($len = $inputString.length() - 1)
"input": "{$util.escapeJavaScript($inputString.substring(1,$len))}"
}
* 模板取自 AWS Cloud Development Kit repo. It is part of the StepFunctionRestApi 构造的实现。
我目前遇到请求直通问题。我需要使用阶跃函数管道处理来自 header 以及请求的 body 的信息。我正在使用 REST API 网关,它在集成请求中具有以下映射模板
#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"
}
但这不起作用。如果我用 lambda 事件访问 header ,那将是 事件['headers']['Authorization'] 但是我只得到我请求的 body 作为我的步骤函数的输入。
当我对整个请求使用数据流模拟器,然后将 JsonPath 放入我的状态机模板时,它仍然没有给我 header 和 body 作为输入。
有人可以帮我解决这个问题吗?
调整此 VTL 请求映射模板* 以将请求数据添加到状态机输入。
- 将
%STATEMACHINE%
替换为您的状态机的 ARN - 可选择将
$includeHeaders
、$includeQueryString
或$includePath
设置为false
。 - 可选择将
$requestContext
设置为 context key-value pairs。使用@@
而不是引号,如"{@@user@@:@@$context.identity.user@@}"
.
## Velocity Template used for API Gateway request mapping template
## "@@" is used here as a placeholder for '"' to avoid using escape characters.
#set($includeHeaders = true)
#set($includeQueryString = true)
#set($includePath = true)
#set($requestContext = '')
#set($inputString = '')
#set($allParams = $input.params())
{
"stateMachineArn": "%STATEMACHINE%",
#set($inputString = "$inputString,@@body@@: $input.body")
#if ($includeHeaders)
#set($inputString = "$inputString, @@header@@:{")
#foreach($paramName in $allParams.header.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.header.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
#if ($includeQueryString)
#set($inputString = "$inputString, @@querystring@@:{")
#foreach($paramName in $allParams.querystring.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.querystring.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
#if ($includePath)
#set($inputString = "$inputString, @@path@@:{")
#foreach($paramName in $allParams.path.keySet())
#set($inputString = "$inputString @@$paramName@@: @@$util.escapeJavaScript($allParams.path.get($paramName))@@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }")
#end
## Check if the request context should be included as part of the execution input
#if($requestContext && !$requestContext.empty)
#set($inputString = "$inputString,")
#set($inputString = "$inputString @@requestContext@@: $requestContext")
#end
#set($inputString = "$inputString}")
#set($inputString = $inputString.replaceAll("@@",'"'))
#set($len = $inputString.length() - 1)
"input": "{$util.escapeJavaScript($inputString.substring(1,$len))}"
}
* 模板取自 AWS Cloud Development Kit repo. It is part of the StepFunctionRestApi 构造的实现。