Справочник по SQS API не дает полной ясности и, на самом деле, кажется несколько несовместимым с тем, что сервис действительно ожидает увидеть.В сети используется нотация .member.N.
, и N
основывается на 1, а не на 0.Кроме того, MessageAttributes
во множественном числе.
Ожидаемый формат выглядит следующим образом:
&MessageAttributes.member.1.Name=source_ip##
&MessageAttributes.member.1.Value.DataType=String##
&MessageAttributes.member.1.Value.StringValue=$util.urlEncode($context.identity.sourceIp)##
&MessageAttributes.member.2.Name=user_agent##
&MessageAttributes.member.2.Value.DataType=String##
&MessageAttributes.member.2.Value.StringValue=$util.urlEncode($context.identity.userAgent)##
&MessageAttributes.member.3.Name=stage##
&MessageAttributes.member.3.Value.DataType=String##
&MessageAttributes.member.3.Value.StringValue=$util.urlEncode($context.stage)##
##
для удобства чтения.Вы не можете иметь новые строки в шаблоне отображения при создании веб-формы, потому что они окажутся в самой форме, а ##
говорит VTL, что все, что находится здесь, до конца строки, следует игнорировать,включая перевод строки в конце строки.В противном случае встроенные символы новой строки могут привести к неправильной конструкции формы.
Также обратите внимание, что API не позволяет указывать эти значения пустыми, поэтому, если есть вероятность, что какой-либо атрибут не будет присутствовать, вам потребуется дополнительная логика, чтобы проверить это и заменить атрибут чем-тоиначе, потому что индексные номера (iirc) должны быть последовательными.
Почему мы используем шаблон отображения тела для создания веб-формы для API Gateway + SQS и дополнительную информацию о том, как его настроить, такжеболее подробно объяснил в моем ответе на Можно ли POST к URL SQS, используя тело POST?