apigateway websocket sqs 集成

Gop*_*pal 3 amazon-sqs amazon-web-services websocket aws-api-gateway

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

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

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

配置请求模板为

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

设置($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=) 转换前的端点响应正文:无法确定要授权的服务/操作名称

Aks*_*sel 7

几乎晚了一年,但我找到了一种方法来做到这一点。您无法从控制台本身执行此操作,但可以通过 CLI 使其工作。

本指南涵盖了大部分步骤,但将其设为 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)"
  }
}
Run Code Online (Sandbox Code Playgroud)

并像这样更新集成:

aws apigatewayv2 update-integration \ 
--api-id API_ID \
--integration-id INTEGRATION_ID \
--cli-input-json file://update.json
Run Code Online (Sandbox Code Playgroud)

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

aws apigatewayv2 get-integrations --api-id API_ID
Run Code Online (Sandbox Code Playgroud)

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

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