使用API​​网关发布到SQS

时间:2018-11-14 21:01:54

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

在接受答案here之后,我尝试配置API网关以使用POST而不是GET将消息发送到SQS(我能够使GET工作)。使用POST时,我得到以下响应:

<AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>

这是我的映射模板的配置方式

#set($clientKey = $input.params('clientkey'))
#set($url = "https://sqs.us-east-2.amazonaws.com/XXXXXXXX/SomeQueuePrefix-${clientKey}-SomeQueueEnvironment.fifo")
Action=SendMessage##
&QueueUrl=$util.urlEncode($url)##
&MessageGroupId=$input.params('messageGroupId')##
&MessageDeduplicationId=1##
&MessageBody=$util.urlEncode($input.body)

看起来正确地映射了身体

Wed Nov 14 20:39:44 UTC 2018 : Endpoint request body after transformations: Action=SendMessage&QueueUrl=https%3A%2F%2Fsqs.us-east-2.amazonaws.com%2FXXXXXXXXX%2FSomeQueuePrefix-TEST-SomeQueueEnvironment.fifo&MessageGroupId=3&MessageDeduplicationId=1&MessageBody=%7B%0A++++%22configurationId%22%3A+1%0A%7D
Wed Nov 14 20:39:44 UTC 2018 : Sending request to https://sqs.us-east-1.amazonaws.com//

Screenshot of my Integration Request setup

我的IAM政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:sqs:us-east-1:XXXXXXXXX:CADAUTO-*-DEV.fifo"
            ],
            "Action": [
                "sqs:SendMessage",
                "sqs:ReceiveMessage",
                "sqs:DeleteMessage"
            ]
        }
    ]
}

有人能看到为什么这不起作用吗?

2 个答案:

答案 0 :(得分:0)

SQS希望内容类型为“内容类型”到“应用程序/ x-www-form-urlencoded”。在API网关设置的HTTP标头中进行设置可以解决我的问题。

答案 1 :(得分:0)

刚刚遇到了同样的问题。使用上面的@Hari Krishnan的建议是解决方案的一部分;我需要为用例使用其他映射模板。 Step 6 of the following tutorial 为我解决了我的问题。