【发布时间】: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 的日志,一切都很好。
event的body参数包含我的 {"action": "sendMessage", "data":"test"}。 API Gateway 似乎只记录 $disconnect 事件并且没有显示任何错误。你要我给你看日志吗?在这种情况下,我将更新 Lambda 的print并更新问题。 -
嗨 - 您可以使用日志记录模块来调试它 - 您的所有日志记录语句都将进入 cloudwatch 日志(比打印更好)
-
谢谢,是的,我会使用它。到目前为止,使用日志记录可能没有提供比打印更多的信息,我只是试图制作一个最小的示例代码
标签: amazon-web-services websocket aws-lambda aws-api-gateway