在AWS ApiGateway中设置基本的WebSocket模拟

时间:2019-04-09 13:55:16

标签: websocket aws-api-gateway

我正在尝试在AWS ApiGateway中设置一个非常简单的WebSocket模拟。但是,我尝试过的每一次尝试都会给我一个错误:

13:36:52 (X33uOGUfIAMFq7w=) Extended Request Id: X33uOGUfIAMFq7w=
13:36:52 (X33uOGUfIAMFq7w=) Verifying Usage Plan for request: X33uOGUfIAMFq7w=. API Key: API Stage: redacted/prod
13:36:52 (X33uOGUfIAMFq7w=) API Key authorized because route '$connect' does not require API Key. Request will not contribute to throttle or quota limits
13:36:52 (X33uOGUfIAMFq7w=) Usage Plan check succeeded for API Key and API Stage redacted/prod
13:36:52 (X33uOGUfIAMFq7w=) Starting execution for request: X33uOGUfIAMFq7w=
13:36:52 (X33uOGUfIAMFq7w=) WebSocket Request Route: [$connect]
13:36:52 (X33uOGUfIAMFq7w=) Client [UserAgent: null, SourceIp: redacted] attempts to connect to WebSocket API [redacted].
13:36:52 (X33uOGUfIAMFq7w=) Execution failed due to configuration error: statusCode should be an integer which defined in request template
13:36:52 (X33uOGUfIAMFq7w=) Client [UserAgent: null, SourceIp: redacted] failed to connect to API [redacted].

据我所知,我遵循了最基本的配置。我不需要任何响应或模板,只需一个简单的WebSocket连接,即可使我连接到该连接而无所事事,或者最终用ping响应pong请求。

api route $connect

所有授权和API密钥均已禁用。由于我不需要请求模板或集成响应,因此无需设置。同样,目标是仅具有可连接的哑WebSocket。

no request templates

但是,每当我尝试连接到它时,上面的错误日志都会显示有关状态代码的500错误。

WebSocket connection to 'wss://redacted.execute-api.us-east-1.amazonaws.com/prod' failed: Error during WebSocket handshake: Unexpected response code: 500

2 个答案:

答案 0 :(得分:3)

使用以下消息源(如下),我能够获得一个快速且宽松的示例AWS API Gateway连接,该示例使用带有Web套接字的MOCK端点进行工作。我确信可以将其清除掉,以更好地理解不同的请求/响应正文消息和代码。

  1. 首先,转到API网关,单击创建API
  2. 对于选择协议,请选择 WebSocket
  3. 给API命名,并将示例$request.body.message用于路由选择表达式
  4. 点击创建API 按钮
  5. 从侧面窗格中选择新的API,然后单击路由
  6. 选择 $connect 路线
  7. 路由概述下,选择端点的模拟单选按钮
  8. 对于请求模板,输入表达式(例如200)。
  9. 对于模板密钥,输入密钥(例如200)
  10. 对于传递行为的弹出窗口,请选择否,暂时使用当前设置
  11. 单击模板密钥 200,然后输入模板:{"statusCode" : 200},然后单击“保存”按钮。 connect integration request

  12. 选择路由概述以返回到 $connect 概述页面,然后选择添加集成响应按钮

  13. 创建 $ default 响应键,该键将引用 Routes 下的 $default 路由 connect integration response

  14. 对于 $disconnect 路线,请对此特定路线重复步骤 7-13 disconnect route

  15. 完成设置 $disconnect 路线后,请在“ 路线”窗格下选择 $default 路线。 default route
  16. 创建集成请求,方法与 $connect $disconnect 相同(步骤 7-11
  17. 对于 $default 下的 Integration Response ,我们将设置的路由响应与 $connect 略有不同和 $disconnect ,因为这2条路线的响应实际上在各自的集成响应中引用了 $default 响应。 / li>
  18. 创建 $ default
  19. 响应键
  20. 输入模板选择表达式(此示例使用200)
  21. 然后创建一个模板密钥(此示例使用200)
  22. 单击模板密钥 200,然后输入模板:{"statusCode" : 200, "connectionId" : "$context.connectionId"},然后单击“保存”按钮。 default response
  23. {"connectionId" : "$context.connectionId"}已添加到响应有效负载中,以显示如何在响应中使用变量来表示连接的实际值。
  24. 最后,在操作下拉菜单下,选择 Deploy API ,然后输入部署阶段名称。这应该生成一个WebSocket URL,现在可以将其连接到例如(wss://#######.execute-api.us-east-1.amazonaws.com/Test
  25. 通过cli使用wscat,现在可以连接到我的WebSocket URL(请参见下面的源代码来安装wscat):wscat -c wss://#######.execute-api.us-east-1.amazonaws.com/Test cli websocket

来源:

答案 1 :(得分:1)

我已经使用CloudFormation自动化了Woodrow描述的步骤,因此现在任何人都可以更轻松地重现它。 可以在以下位置找到模板:https://gist.github.com/maatthc/9d2dfe0448733f0ee1624d658fbac80f。 要使用它创建一个新的堆栈,您应该:

  1. 将模板下载到您的计算机上。
  2. 转到AWS控制台中的Cloudformation(https://ap-southeast-2.console.aws.amazon.com/cloudformation/)-更改您的AWS区域。
  3. 单击“创建堆栈”
  4. 选择“上传模板文件”并使用您下载的模板。
  5. 单击“下一步”,为堆栈命名,然后再次单击“下一步”。
  6. 单击“下一步”,然后单击“创建堆栈”。

希望对您有帮助。

欢呼