我正在尝试将API网关WebSocket路由与SQS集成。
我已使用以下属性配置了SQS集成
AWS地区:ap-southeast-1 AWS服务:SQS HTTP方法:POST 路径覆盖:111111110111 / my-queue
将请求模板配置为
“ Action = SendMessage&MessageBody = $ util.urlEncode($ input.body)##
当我尝试将数据发送到SQS时,失败并出现以下错误
错误:
(VK1mEHZSyQ0FlZg =)转换后的端点请求主体:Action = SendMessage&MessageBody = foobar (VK1mEHZSyQ0FlZg =)向https://sqs.ap-southeast-1.amazonaws.com/111111110111/my-queue发送请求 (VK1mEHZSyQ0FlZg =)收到响应。整合延迟:16毫秒 (VK1mEHZSyQ0FlZg =)转换前的端点响应主体:无法确定要授权的服务/操作名称
答案 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。