如何将响应放在 websocket api 网关后面的单独 lambda 中?

Posted

技术标签:

【中文标题】如何将响应放在 websocket api 网关后面的单独 lambda 中?【英文标题】:How can I put a response in a separate lambda behind websocket api gateway? 【发布时间】:2020-09-08 20:50:54 【问题描述】:

我有一个带有 websocket 连接的 AWS API 网关。这个 API 网关调用了一个 lambda (LA),它将请求连同 websocket 连接 ID 一起发送到另一个服务。之后它就存在了。 还有另一个 lambda LB 正在侦听一些后端数据存储。如果有任何更新事件,数据存储服务将调用LB。该事件包括 websocket 连接 ID。我想让LB 向API 网关发送一个更新事件,API 网关通过websocket 连接将此事件转发给客户端。 这是我心中的一种交流方式。我的问题是 API 网关是否支持这种模式。如果是,LB 如何向 API 网关和客户端发送响应事件?

通信如下图所示。问题是它是否有效?响应 lambda 是如何向 API 网关发送事件的?

我已添加如下集成响应。有Integration RequestIntegration Response。但我只能为他们两个设置一个 lambda。如何为请求和响应创建不同的 lambda?

【问题讨论】:

【参考方案1】:

是的,它有效。

API Gateway WebSocket API 是 bidirectional。客户端可以向服务发送消息,服务可以independently 向客户端发送消息。

有两种方法可以将您的lambda 的回复发送到api gateway

1) 集成可以发送响应,该响应通过您定义的路由响应返回给客户端。这里是details

2) 您可以使用@connections API 发送POST 请求。有关更多信息,请参阅在后端服务中使用 @connections 命令。这里是details

您的情况类似于选项 2。在您的 lambda 上使用 connection api 调用 api gateway

【讨论】:

我添加了一个路由响应,但 Integration ResponseRoute Response 是灰色的。我无法点击它们进行编辑。 @JoeyYiZhao 如果你的意思是prnt.sc/slp43x 的那部分,这些是可点击的——你需要部署——你能分享截图吗?你会选择第一个选项吗? 可以点击integration request。我的意思是Integration response。在我的模式中,有两个 lambda,一个用于请求,另一个用于响应。我正在寻找一种从不同的 lambda 配置 integration response 的方法。 我知道为什么Integration response 不可点击。因为它需要是非代理集成。将其更改为非代理集成后,我无法为请求和响应设置两个 lambda。 我想我知道它是如何工作的。我可以创建一个 lambda 来调用 API AWS.ApiGatewayManagementApi 以通过 websocket 向客户端发送消息。不需要将此 lambda 放入 API 网关定义中。 API Gateway 控制台误导了我。

以上是关于如何将响应放在 websocket api 网关后面的单独 lambda 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CloudFormation 为 API 网关 v2 websocket 连接设置 VPC

(ASK) 我们如何使用 AWS api 网关调试本地 websocket

如何在接收响应时通过 websocket 发送请求

长连接网关技术专题:爱奇艺WebSocket实时推送网关技术实践

构建通用WebSocket推送网关的设计与实践

如何在 Node.js 中使用带有 API 网关的 AWS Lambda 发送二进制响应? [复制]