将URL路径参数从API网关传递到步骤函数



我有一个带有Step Function集成的API网关路由。

在这个步骤函数中,我需要请求提供的id。

对于lambda集成,我知道如何做到这一点,但在这种情况下,我找不到任何资源。这可能吗?如果可能,怎么做?

调整此VTL请求映射模板*以将路径参数添加到状态机输入。

  • 用状态机的ARN替换%STATEMACHINE%
  • 可选地,将$includeHeaders$includeQueryString设置为false
  • (可选(将$requestContext设置为上下文键值对。使用@@而不是引号,如"{@@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云开发工具包repo。它是StepFunctionRestApi构造实现的一部分。

如果您只对读取路径参数感兴趣,这里有一个紧凑的模板可以使用。

#set($inputString = "{@requestBody@: $input.json('$'), @pathParameters@: {")
#set($pathParams = $input.params().get('path'))
#foreach($paramName in $pathParams.keySet())
#set($inputString = "$inputString @$paramName@: @$pathParams.get($paramName)@")
#if($foreach.hasNext)
#set($inputString = "$inputString,")
#end
#end
#set($inputString = "$inputString }}")
#set($inputString = $inputString.replaceAll("@",'"'))
{
"input": "$util.escapeJavaScript($inputString).replaceAll("\'","'")",
"name": "$context.requestId",
"stateMachineArn": "${ErNameIntent}"
}

这将导致有效载荷,如:

{
"requestBody": <requestbody>,
"pathParameters": {
<key1>: <value1>,
<key2>: <value2>,
...
<keyN>: <valueN>
}
}

最新更新