apigateway websocket sqs集成

时间:2019-02-16 14:08:16

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

我正在尝试将API网关WebSocket路由与SQS集成。

我已使用以下属性配置了SQS集成

AWS地区:ap-southeast-1 AWS服务:SQS HTTP方法:POST 路径覆盖:111111110111 / my-queue

将请求模板配置为

“ Action = SendMessage&MessageBody = $ util.urlEncode($ input.body)##

set($ context.requestOverride.header.Content-Type =“ application / x-www-form-urlencoded”)##“

当我尝试将数据发送到SQS时,失败并出现以下错误

错误:

(VK1mEHZSyQ0FlZg =)转换后的端点请求主体:Action = SendMessage&MessageBody = foobar (VK1mEHZSyQ0FlZg =)向https://sqs.ap-southeast-1.amazonaws.com/111111110111/my-queue发送请求 (VK1mEHZSyQ0FlZg =)收到响应。整合延迟:16毫秒 (VK1mEHZSyQ0FlZg =)转换前的端点响应主体:无法确定要授权的服务/操作名称

1 个答案:

答案 0 :(得分:0)

快一年了,但我想出了一种方法。您无法从控制台本身执行此操作,但是可以通过CLI使其运行。

this guide中介绍了大多数步骤,但请使其成为WS api,而不是REST api。

您将注意到无法指定HTTP标头,也无法指定映射模板。由于某些原因,该功能在控制台上不可用。您必须改为通过CLI执行此操作。将以下内容另存为JSON文件。

{
  "PassthroughBehavior": "NEVER",
  "RequestParameters": {
    "integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
  },
  "RequestTemplates": {
    "application/json": "Action=SendMessage&MessageBody=$util.urlEncode($input.body)"
  }
}

并像这样更新集成:

aws apigatewayv2 update-integration \ 
--api-id API_ID \
--integration-id INTEGRATION_ID \
--cli-input-json file://update.json

您会在API概述的控制台上看到API ID,但是必须通过CLI查找集成ID,如下所示:

aws apigatewayv2 get-integrations --api-id API_ID

这导致正文本身以纯文本形式发送到SQS队列。

注意:如果使用CloudFormation / SAM创建API,则可以放弃所有这些操作,因为这使您可以直接设置RequestParameters和RequestTemplates。