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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让我的Lambda函数与在本地计算机上运行的服务器通信?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

如果您在VPC和本地网络之间设置VPN或直接连接,则可以进行此操作。

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

另一答案

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

一般来说,你需要的是:

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

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

一些可能有用的链接:

另一答案

我将专门编写Java语言:

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

public O handleRequest(我输入,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语言为这种泛化和抽象提供了更丰富的工具。

以上是关于如何让我的Lambda函数与在本地计算机上运行的服务器通信?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UI 在浏览器中运行与在我的计算机上运行 (Java Swing) 时会丢失格式?

在本地调试C#AWS Lambda函数

如何找出CMD.exe进程在远程计算机上运行的脚本?

是否可以在我的本地计算机上运行 .php 文件? [复制]

如何在我的计算机上运行 htdocs 目录之外的 PHP 文件?

在其他计算机上运行 Allegro 5