AWS API Gateway для SQS - шаблон отображения тела - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь создать прокси-сервер для AWS SQS из API-шлюза, но у меня возникают трудности с шаблоном сопоставления тела.

Я получаю запрос с 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"?>SenderAccessDenied Доступ к ресурсу https://sqs.us -east-1.amazonaws.com / XXXXXXXXX / queue-events.fifo запрещен. 92f717d8-369c-58c8-abe9-4473b9fb2aab

Но если я уберу #foreach из моего шаблона и оставлю его так:

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

Все работает как положено.Преобразованное тело запроса такое же, как и в прошлый раз, но на этот раз оно работает.

Я предоставил полный доступ к SQS, но все еще получаю ошибку.

Я считаю, что я делаю что-то не так, но я не могу точно определить, что именно.

Может кто-нибудь помочь?Спасибо

1 Ответ

0 голосов
/ 26 июня 2018

Ошибка SQS может быть вызвана ошибкой или исключением при разборе строк запроса, которое может быть перехвачено, в противном случае оставшаяся часть шаблона не будет отображаться, но при этом генерируется какое-то дополнительное событие отчета.

Вы могли бы продолжить свою дихотомию, чтобы понять, какие строки имеют проблему.

Но почему вы выполняете анализ самостоятельно?Вы могли бы сделать:

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