是否可以使用 AWS 以无服务器方式订阅 WebSocket?
Posted
技术标签:
【中文标题】是否可以使用 AWS 以无服务器方式订阅 WebSocket?【英文标题】:Is it possible to subscribe to a WebSocket in a serverless fashion using AWS? 【发布时间】:2017-12-13 04:53:51 【问题描述】:网站提供了一个 websocket 来获取实时数据。我正在尝试在 DynamoDB 表中记录从 websocket 接收到的数据,以作为无服务器应用程序的数据源。他们如何使用 websocket 的示例是一些使用 socket.io-client 的 Node.JS 代码。作为 javascript,我想使用 AWS Lambda 函数,但它们并不是为了持续运行。是否有 AWS 服务来处理此类订阅?我不想为了这个目的而制作一个小的 EC2 实例来运行一个小应用程序。
我看过的东西:
Lambda 函数 - 仅适用于短期执行而非长时间运行的任务。 SNS 订阅 - 据我了解,这需要订阅 SNS 发布者。 Kinesis Stream - 要求生产者使用 Streams PUT API。任何帮助将不胜感激!
【问题讨论】:
似乎 serverless 的整个概念与维护 webSocket 与客户端连接的长期运行、有状态的服务器进程相反。 感谢您的回复。我正在寻找一种服务,它是接收从 websocket 推出的新数据的客户端。希望在无服务器框架中实现这似乎是一件合理的事情。 运气好了吗? 我也在寻找类似的东西,你有什么有用的吗? 【参考方案1】:你们看不出来他不想做服务器,而是做客户端吗?
所以,如果我们要成为客户端,那么到目前为止,在 Amazon AWS 上还没有解决方案/服务,它是无服务器的,并且仅在套接字的生存时间内(从连接到断开连接)保持活动状态。
不幸的是,我认为我们只能为这种场景使用实例。
【讨论】:
只有这个答案有意义,我怀疑所有其他答案都是由机器人发布的【参考方案2】:API Gateway 现在支持 WebSocket,您可以在其中处理 Lambda 中的事件并以简化的方式响应。更多信息请参考Announcing WebSocket APIs in Amazon API Gateway
您还可以使用 AWS 中的其他两项服务来实现此目的,
AWS IOT Websockets:- 这个想法是客户将订阅 IOT 主题,然后从 Lambda 将消息推送到客户端。 AWS AppSync(新引入):- 在 Lambda 和 DynamoDB 之间有一个层,它将提供 WebSocket 支持。注意:您目前可能需要申请 AppSync 的预览版。
【讨论】:
有没有实现物联网websocket的例子?我只想订阅一个数据流并将接收到的数据存储在 S3 中。我在 AWS 文档中没有找到任何有用的示例 值得注意的是,AWS 现在已经在 API Gateway 中发布了对 WebSockets 的支持 - 请参阅 aws.amazon.com/blogs/compute/… 这不再是真的,投反对票。 @WarrenParad 感谢您的通知。相应地修改了答案。【参考方案3】:API Gateway 直接支持 websockets。因此,您可以将 APIGW websocket api 连接到 lambda 函数并将其连接到 DynamoDB。
提供setting up websockets in APIGW 的详细分步指南。
一个示例设置可能是:
# 1. Create API Gateway Websocket
# 2. Create integration
aws apigatewayv2 create-integration
--api-id APIGW_ID --integration-type AWS_PROXY
--integration-method POST
--integration-uri arn:aws:apigateway:REGION:lambda:path/2015-03-31/functions/LAMBDA_ARN/invocations
【讨论】:
以上是关于是否可以使用 AWS 以无服务器方式订阅 WebSocket?的主要内容,如果未能解决你的问题,请参考以下文章
AWS 云中带有订阅的 Apollo GraphQL 服务器