Amazon Lambda和Windows应用程序之间的通信

时间:2018-03-20 17:35:34

标签: amazon-web-services aws-lambda

我是AWS和云计算的新手,所以如果这个问题很愚蠢我会道歉。

我目前正在开发一款适用于Amazon Echo的应用程序,可以远程控制PC(即更改音量,暂停电影等)。我的问题是我不知道如何在我的Amazon Lambda服务和我的Windows应用程序之间进行通信。 有什么想法吗?

谢谢, 杰克

1 个答案:

答案 0 :(得分:1)

您提出问题的方式可能存在一些问题 - 如何在Lambda函数和Windows机器之间进行通信可能涉及许多不同的解决方案,但您正在寻找什么(据我所知) )是一个更具体 - 但同时更具普遍性的 - 解决方案。

您是否正在尝试实现用户可以使用的Alexa技能,或者仅为自己制作一些东西?它产生了很大的不同,因为只有你自己才能实现许多hacky解决方案,如端口转发和动态DNS,如果你试图在现实世界中这样做,它们会大大失败。你需要另一个组件 - 某种实时推送消息 - 在一个代理和#34;之间架起桥梁。在您的Windows应用程序和Lambda代码发出的请求中。

您要解决的实际问题不是如何在AWS Lambda和Windows应用程序之间进行通信,而是需要了解像Alexa这样的平台需要如何与智能家居进行通信。设备,特别是entertainment device

这是一项相对复杂的工作,因为 - 从根本上说 - 没有办法直接在Lambda和互联网上的任意设备之间进行通信。动态IP地址,网络地址转换(NAT),防火墙,安全注意事项和其他因素使得无法可靠地启动从Lambda函数(或实际上从任何Internet连接的设备)到任何其他任意目标设备的连接。大多数设备(我的手机,我的Alexa控制的灯开关,我的Windows笔记本电脑)都在一个边界后面运行,该边界假定请求是在边界后面发起的。当我打开网站,流式传输视频等时,我发起请求,响应从我创建的通道(通常是TCP连接)返回,从我的边界后面(例如我的电缆调制解调器中的路由器)没有&# 39; t允许外部启动TCP连接。它们一旦建立就是双向的,但必须从内部启动。

当然,你可以静静地捅一个洞"在您的路由器配置中,通过将特定的TCP端口转发到特定的内部(通常是私有)IP地址,只要您的Internet提供商不更改您的IP地址,并且您的内部设备无法获得新的IP地址......还有UPnP NAT Traversal,这似乎是一个很好的解决方案,直到你意识到它也很糟糕(虽然对于一个"爱好者"应用程序,它可以工作)

虽然这是一个漫长而复杂的主题,但简短的回答是Alexa通过Lambda代码只能启动连接,而您的设备,无论在哪里,都只能启动连接 - 不接收它们...因此你需要某种"在中间见面"解决方案:允许设备维持其连接的东西。中心服务"可以按需协调互动。

例如:

  

AWS IoT Core是一个托管云平台,可让连接的设备轻松安全地与云应用程序和其他设备进行交互。 AWS IoT Core可以支持数十亿台设备和数万亿条消息,并可以可靠,安全地处理和路由这些消息到AWS端点和其他设备。借助AWS IoT Core,您的应用程序可以随时跟踪所有设备并与之通信,即使它们未连接也是如此。

     

https://aws.amazon.com/iot-core/

客户端启动连接(例如通过Web套接字)到IoT平台,并对其进行维护,以便当消息到达IoT时,服务知道如何将消息传递给客户端。接收。 ("即使他们没有在线"指的是"设备阴影"功能,它允许您以编程方式与设备的代理交互,例如,知道最后的温度设置一个恒温器,并要求恒温器在未来的某个时间点重新建立连接时改变其设定点。)

或者,可能是这样的:

  

Firebase云消息传递(FCM)是一种跨平台的消息传递解决方案,可让您可以免费可靠地传递消息。

     

使用FCM,您可以通知客户端应用程序可以同步新电子邮件或其他数据。

     

https://firebase.google.com/docs/cloud-messaging/

这两种潜在的解决方案都可以解决问题,因为他们知道如何联系"任意设备,无论它们在哪里......我建议这是你实际需要的核心。

这种"服务有很多替代品,"包括自己的websocket或HTML EventSource实现与服务器......这不是产品推荐的目的,而是让你了解这种情况需要什么 - 一个可以与之交互的中间平台通过Lambda代码,它也知道如何与代理商#34;在设备上运行的代码...因为Lambda和代理都需要启动通信通道,因此需要额外的组件将它们连接在一起。