如何让我的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就像克里斯建议的那样,这可以确保您的服务不会暴露在互联网上
一些可能有用的链接:
- 在VPC中设置Internet access for your lambdas。
- 设置Internet access for your VPC。
- 设置VPC for 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) 时会丢失格式?