Amazon web services 如何使Lambda函数与本地计算机上运行的服务器通信?

Amazon web services 如何使Lambda函数与本地计算机上运行的服务器通信?,amazon-web-services,aws-lambda,localhost,Amazon Web Services,Aws Lambda,Localhost,我正在创建一个Lambda函数,用于调用服务器上的某些功能 我想针对服务器的本地实例测试Lambda函数,这样就不必为了测试运行整个流程而部署到AWS 是否有任何方法可以从Lambda内部调用我的本地计算机的开发服务器,而不必继续部署到AWS(或其他远程服务器)?如果您在VPC和本地网络之间设置VPN或直接连接,这是可能的 但老实说,这可能比简单地部署到EC2实例更昂贵、更复杂。自动化部署应该简单明了。信息太少。这取决于lambda的配置方式。如果它在专有网络中,那么该专有网络是如何配置的。你的

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

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


是否有任何方法可以从Lambda内部调用我的本地计算机的开发服务器,而不必继续部署到AWS(或其他远程服务器)?

如果您在VPC和本地网络之间设置VPN或直接连接,这是可能的


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

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

一般来说,您需要的是:

  • 您的服务暴露于Internet:
    • 本地计算机的公共IP
    • 端口(您的服务在其上公开)在被防火墙等阻止时打开
  • 您的lambda可以访问Internet(路由、安全组/acl/网关):
    • 如果lambda在公共子网中,请参阅AWS文档,了解如何设置IGW
    • 如果在专用子网中,请参阅AWS文档,了解如何设置NAT GW
否则,若你们的笔记本电脑在某个特殊的安全网络中,那个么就像克里斯建议的那个样,VPN可以确保你们的服务不会暴露在互联网上

一些可能有帮助的链接:

  • 在VPC中设置
  • 设置
  • 设置访问权限

我将针对Java语言编写:

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

公共O handleRequest(I输入,上下文)

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

@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());
}
如果您编写这样的单元测试,还可以通过测试服务器上的CI工具(如Jenkins)触发它们


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

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

您主要关心的是使用您最喜欢的IDE进行调试吗?若并没有,那个么设置EC2服务器是很便宜的,您只需要启动它进行测试。不使用时不收费。或者,如果您需要一个更丰富的环境来测试和调试它,也可以签出


还要记住,您的EC2实例可以使用Route 53专用主机区域将任意url映射到您的实例,这会使事情更干净,更接近生产环境

您可能还想看看本地测试Lambda函数的选项,包括SAM本地和各种GitHub项目?它只是对服务器进行http[s]调用,对吗?这些可以在lambda环境之外进行测试吗?