Amazon web services 希望从API网关将WebRequest的头值传递给SQS(作为令牌值或属性传递)
我在WebHook中得到一个特殊标题的签名。我想在标记体或属性中将相同的消息传递给SQS。我尝试了以下配置。它不起作用。请帮忙 详情如下:Amazon web services 希望从API网关将WebRequest的头值传递给SQS(作为令牌值或属性传递),amazon-web-services,aws-api-gateway,amazon-sqs,Amazon Web Services,Aws Api Gateway,Amazon Sqs,我在WebHook中得到一个特殊标题的签名。我想在标记体或属性中将相同的消息传递给SQS。我尝试了以下配置。它不起作用。请帮忙 详情如下: AWS Service : Simple Queue Service (SQS) HTTP method :POST Path override :Account/QueueName?Action=SendMessage Execution role :arn:aws:iam::Acc#:role Content Handling :Passthrough
AWS Service : Simple Queue Service (SQS)
HTTP method :POST
Path override :Account/QueueName?Action=SendMessage
Execution role :arn:aws:iam::Acc#:role
Content Handling :Passthrough
Body Mapping Templates :
Content-Type : application/json
{
"MessageBody" : {
"payload": $input.json('$'),
"x-api-key" : "$input.params('x-api-key')"
}
}
Instead of MessageBody, I also tried with "body".
Response I get :
{
"Error": {
"Code": "MissingParameter",
"Message": "The request must contain the parameter MessageBody.",
"Type": "Sender"
},
"RequestId": "d5fc3acf-18dc-5379-9af2-6b4cc42358f3"
}
我错过了什么?请帮忙。我花了几乎一整天的时间想弄明白
提前感谢。SQS SendMessage API要求MessageBody参数作为查询字符串参数传递。您可以将API网关配置为从任何输入参数传递此参数,但遗憾的是,目前无法使用基本参数映射操作MessageBody,以向消息正文添加其他参数。如果SQS API将MessageBody参数作为http请求的POST主体,那么您可以使用映射模板来实现,但不幸的是,它要求MessageBody作为查询字符串参数传递
目前实现这一点的唯一方法是使用Lambda函数。您可以使用映射模板将原始MessageBody和api键传递给Lambda函数,然后将它们组合到Lambda函数中,并使用查询字符串参数中的组合MessageBody调用SQS SendMessage api。我最近遇到了类似的问题 我在集成请求中做了以下更改:
Action=SendMessage&MessageBody={
"data" : $input.json('$'),
"headers": {
#foreach($param in $input.params().header.keySet())
"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end
#end
}
}
以下是供参考的屏幕截图:
这对我很有效,它开始在SQS中推动头部和身体
下面是在队列中被推送的示例消息:
{
“数据”:{“body-key1”:“body-value-1”},
“标题”:{
“header1”:“value1”} } 所以这里发生的事情是,当我在队列URL上发送post请求时,没有任何查询参数,它直接从映射模板获取主体
希望这个答案能帮助任何人。我认为sqs的输入是错误的。这是一个例子,这是另一个答案,我尝试了上面给出的解决方案。不幸的是,这对我不起作用。在第二个例子中,他们只是添加了主体(我可以通过)。我想对body进行额外的编辑,并向其添加一个标题,或者在属性中传递标题。