如何让我的Lambda函数与在本地计算机上运行的服务器通信?

时间:2018-03-16 16:21:36

标签: amazon-web-services aws-lambda localhost

我正在创建一个Lambda函数,可以调用我服务器上的某些功能。

我想针对我的服务器的本地实例测试Lambda函数,这样我就不必部署到AWS来测试运行整个流程。

有没有办法从Lambda内部调用本地机器的开发服务器而无需继续部署到AWS(或其他一些远程服务器)?

4 个答案:

答案 0 :(得分:1)

如果您在VPC和本地网络之间设置VPN或直接连接,则可以这样做。

但老实说,这可能比简单地部署到EC2实例更昂贵,更复杂。自动部署应该简单明了。

答案 1 :(得分:1)

信息太少。这取决于lambda的配置方式。如果它在VPC中,那么如何配置VPC。您的笔记本电脑是否具有静态IP,如果它位于防火墙后面。

一般来说,你需要的是:

  • 您的服务暴露于互联网:
    • 本地计算机的公共IP
    • 端口(您的服务所在的端口)打开了“如果被防火墙等阻止”。
  • 您的lambda具有Internet访问权限(路由,安全组/ acl /网关):
    • 如果lambda在公有子网中,请参阅AWS doc,了解如何设置IGW。
    • 如果它位于私有子网中,请参阅AWS doc,了解如何设置NAT GW。

否则,如果您的笔记本电脑位于某个特殊的安全网络内,那么就像克里斯建议的那样使用VPN,这样可以确保您的服务不会暴露在互联网上。

一些可能有用的链接:

答案 2 :(得分:0)

我将专门编写Java语言:

AWS Lambda函数是普通的旧Java对象,因此您可以编写单元测试以在本地触发它们。即使您使用的是RequestHandler接口,也需要该函数的入口点来提供

public O handleRequest(I input,Context context);

方法,如果您正在使用上下文变量,您可以轻松地模拟它,例如:

@Test
public void testAddAddressHandlerDevStage() throws Exception {
    Context context = mock(Context.class);       
   when(context.getInvokedFunctionArn()).thenReturn("arn:aws:lambda:eu-central-1:xxxxxxxxxxx:function:updateAddress:TEST");

    Address newAddress = new Address();
    new AddAddress().handleRequest(newAddress, context);
    assertNotNull(newAddress.getId());
}

如果您编写这样的单元测试,您也可以通过测试服务器上的Jenkins等CI工具触发它们。

因此上述测试适用于TEST env变量,但您也可以为DEV环境编写配置。与大多数解释语言相比,Java语言为这种泛化和抽象提供了更丰富的工具。

答案 3 :(得分:0)

如果您的本地计算机可以公开访问,并且您的服务器可以在开放端口上被调用,那么我不明白为什么它不能正常工作。如果DynDNS hack无法公开访问,则可能会起作用。

您主要关心拥有自己喜欢的IDE进行调试吗?如果不是这样,那么设置EC2服务器(仅启动进行测试)会很便宜。不使用时不收费。或者,如果您需要更丰富的环境来进行测试和调试,则可以签出AWS workspaces

还请记住,您的EC2实例可以具有Route 53专用主机区域,该区域将书名URL映射到您的实例,这使事情变得更整洁,更接近生产。