【问题标题】:AWS API Gateway to SQS - Body Mapping TemplateAWS API Gateway 到 SQS - 身体映射模板
【发布时间】:2018-12-04 15:01:26
【问题描述】:

我正在尝试从 API Gateway 创建 AWS SQS 代理,但我在使用 Body Mapping Template 时遇到了困难。

我收到application/x-www-form-urlencoded 内容类型的请求: IDLote=lote434&IDCliente=5&Status=22&Resposta=testmessage

所以我创建了以下模板(将表单值映射到 JSON 对象,然后序列化到消息正文中 - 我不确定是否有更好的方法):

#set($idLote = "")
#set($idCliente = "")
#set($status = "")
#set($resposta = "")
#foreach( $token in $input.path('$').split('&') )
    #set( $keyVal = $token.split('=') )
    #set( $keyValSize = $keyVal.size() )
    #if( $keyValSize >= 1 )
        #set( $key = $util.urlDecode($keyVal[0]) )
        #if( $keyValSize >= 2 )
            #set( $val = $util.urlDecode($keyVal[1]) )
        #else
            #set( $val = '' )
        #end
        #if( $key == "IDLote" )
            #set($idLote = $val)
        #elseif( $key == "IDCliente" )
            #set($idCliente = $val)
        #elseif( $key == "Status" )
            #set($status = $val)
        #elseif( $key == "Resposta" )
            #set($resposta = $val)
        #end
    #end
#end
#set($event =  "{
  ""idLote"": ""1"",
  ""idCliente"": ""2"",
  ""status"": ""3"",
  ""resposta"": ""434""
}")
Action=SendMessage&MessageGroupId=2&MessageBody=TestMessage

变形后的身体是: Action=SendMessage&MessageGroupId=2&MessageBody=TestMessage 符合预期(因为我没有使用创建的 JSON)。

但我从 SQS 收到错误消息: <?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2009-02-01/"><Error><Type>Sender</Type><Code>AccessDenied</Code><Message>Access to the resource https://sqs.us-east-1.amazonaws.com/XXXXXXXXX/queue-events.fifo is denied.</Message><Detail/></Error><RequestId>92f717d8-369c-58c8-abe9-4473b9fb2aab</RequestId></ErrorResponse>

但是,如果我从模板中删除 #foreach 并保持这样:

#set($event =  "{
  ""idLote"": ""1"",
  ""idCliente"": ""2"",
  ""status"": ""3"",
  ""resposta"": ""434""
}")
Action=SendMessage&MessageGroupId=2&MessageBody=TestMessage

一切都按预期进行。转换后的请求正文和上次一样,但这次可以了。

我已授予 SQS 的完全访问权限,但我仍然收到错误消息。

我认为我做错了什么,但我无法确定到底是什么。

有人可以帮忙吗? 谢谢

【问题讨论】:

    标签: amazon-web-services aws-api-gateway velocity amazon-sqs


    【解决方案1】:

    SQS 错误可能是由您在解析查询字符串时出现错误或异常引起的,这些错误或异常恰好被捕获,否则模板的其余部分不会显示,但会生成某种额外的报告事件。

    你可以继续你的二分法来了解哪些行确实有问题。

    但是你为什么要自己进行解析呢?你可以这样做:

    #set($idLote = "$!input.params('IDLote')")
    #set($idCliente = "$!input.params('IDCliente')")
    #set($status = "$!input.params('Status')")
    #set($resposta = "$!input.params('Reposta')")
    

    【讨论】:

    • 我执行了解析,因为我无法获得您建议的参数。我现在又试了一次,也没有用。它应该工作吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2016-01-21
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多