【问题标题】:Websocket API not returning answers AWSWebsocket API 不返回答案 AWS
【发布时间】:2021-11-28 20:06:37
【问题描述】:

我在 AWS 中托管了一个非常简单的 Websocket API
我将此 API 与 Lambda 函数集成,其代码为:

import json


def lambda_handler(event, context):
    print(event)
    return {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps(event)
    }

我还为双向通信添加了集成响应,如documentation中所述

下面是我使用wscat 和命令的测试:wscat -c myapiendpoint

如您所见,我已成功连接,如果我从 request.body.action 选择 (sendMessage) 写入现有路由,则没有错误但没有输出。如果我写了一个错误的路由(test 我没有在 API Gateway 控制台中创建),我会收到一条错误消息。

我还尝试了该函数的更简单的输出,但没有一个有效。我终于按照documentation中的说明写了上面的代码。

我只是希望能够在调用路由时向客户端发送回一条自定义消息(实际上是来自我的数据库的数据)。
这实际上也是我想要的 $connect$disconnect 路线。

我做错了吗?

编辑:

这是我为路由设置的 API 网关:

这是关于 Lambda 权限的截图。顺便说一句,这些是我的所有 Lambda(在 HTTP API 下)的权限,它们都可以正常工作:

【问题讨论】:

  • 你的lambda真的执行了吗,lambda日志告诉你什么,api网关日志告诉你什么?
  • 是的,我在 CloudWatch 中有来自 Lambda 的日志,一切都很好。 eventbody 参数包含我的 {"action": "sendMessage", "data":"test"}。 API Gateway 似乎只记录 $disconnect 事件并且没有显示任何错误。你要我给你看日志吗?在这种情况下,我将更新 Lambda 的print 并更新问题。
  • 嗨 - 您可以使用日志记录模块来调试它 - 您的所有日志记录语句都将进入 cloudwatch 日志(比打印更好)
  • 谢谢,是的,我会使用它。到目前为止,使用日志记录可能没有提供比打印更多的信息,我只是试图制作一个最小的示例代码

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


【解决方案1】:

有时,这可能是您的情况,您尚未将更改部署到 WebSocket API。 当我使用 HTTP API 而不是 WebSocket API 使用自动化阶段部署时,这发生在我身上。

【讨论】:

    【解决方案2】:

    您的 Lambda 函数似乎无权将消息发布到 API Gateway 连接。尝试为您的 Lambda 函数授予对 API Gateway 资源的操作execute-api:ManageConnections 的权限。

    【讨论】:

    • 感谢您的回答。你能提供更多细节吗?尝试将其添加到我的 lambda 时找不到此权限。此外,我还添加了我当前权限的屏幕截图,这些权限可以与 HTTP API 一起正常工作,并且对于这个 Lambda 也是一样的。
    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多