Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 希望从API网关将WebRequest的头值传递给SQS(作为令牌值或属性传递)_Amazon Web Services_Aws Api Gateway_Amazon Sqs - Fatal编程技术网

Amazon web services 希望从API网关将WebRequest的头值传递给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

我在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

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。

我最近遇到了类似的问题

我在集成请求中做了以下更改:

  • 我删除了查询参数中的所有内容
  • 在映射模板中添加了操作和MessageBody
  • 当没有模板与请求内容匹配时,将请求正文传递设置为- 类型标题
  • 内容处理设置为Passthrough
  • 下面是我在映射模板中添加的代码片段:

    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进行额外的编辑,并向其添加一个标题,或者在属性中传递标题。