无法从 API 网关向 FIFO SQS 发送消息

Abh*_*mar 5 amazon-sqs amazon-web-services aws-api-gateway

我使用以下链接将 API 网关与 FIFO SQS 队列集成在一起 https://medium.com/@pranaysankpal/aws-api-gateway-proxy-for-sqs-simple-queue-service-5b08fe18ce50

以下是角色策略的片段

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessageBatch",
                "sqs:ReceiveMessage",
                "sqs:SendMessage"
            ],
            "Resource": "arn:aws:sqs:*:12345678:Stg"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

每当尝试从 API Gateway 测试它时,它都会抛出以下错误:- "Message": "The request must contain the parameter MessageGroupId."

所以我尝试通过查询字符串发送它,但错误仍然存​​在。

我按照上面的链接为正文模板和标题执行了相同的步骤。

MessageGroupId=098
Run Code Online (Sandbox Code Playgroud)

只需在查询字符串中传递上面的值,正文在下面

{"ty":"ui"}
Run Code Online (Sandbox Code Playgroud)

小智 7

您需要添加MessageGroupId,并MessageDeduplicationIdURL查询字符串参数方法执行。与您为MessageBody.

您还需要将MessageGroupId, 和添加MessageDeduplicationId集成请求。再次以与MessageBody.

  • 正文模板将是。Action=SendMessage&MessageGroupId=$input.params('MessageGroupId')&MessageDeduplicationId=$input.params('MessageDeduplicationId')&MessageBody=$input.body (5认同)

Sam*_*Sam 5

您可以从API网关的响应中提取MessageGroupId和。MessageDeduplicationId例如:如果有效负载如下所示,您可以从有效负载中提取任何属性。清晰的视频教程在这里。https://www.youtube.com/watch?v=dXa9KA-G9Dg

假设有效负载是这样的:

{
  "data" :{
    "jobNumber": "123456"
  }
}
Run Code Online (Sandbox Code Playgroud)

那么api gateway中的模板如下。它从有效负载中提取jobNumber并设置为MessageGroupId。这里MessageDeduplicationId是从上下文中得到的。

#set($dedupId = $context.requestId)
#set($groupId = $input.json('$.data.jobNumber'))
Action=SendMessage&MessageBody=$input.body&MessageGroupId=$groupId&MessageDeduplicationId=$dedupId

Run Code Online (Sandbox Code Playgroud)