我正在创建一个Lambda函数,可以调用我服务器上的某些功能。
我想针对我的服务器的本地实例测试Lambda函数,这样我就不必部署到AWS来测试运行整个流程。
有没有办法从Lambda内部调用本地机器的开发服务器而无需继续部署到AWS(或其他一些远程服务器)?
答案 0 :(得分:1)
如果您在VPC和本地网络之间设置VPN或直接连接,则可以这样做。
但老实说,这可能比简单地部署到EC2实例更昂贵,更复杂。自动部署应该简单明了。
答案 1 :(得分:1)
信息太少。这取决于lambda的配置方式。如果它在VPC中,那么如何配置VPC。您的笔记本电脑是否具有静态IP,如果它位于防火墙后面。
一般来说,你需要的是:
否则,如果您的笔记本电脑位于某个特殊的安全网络内,那么就像克里斯建议的那样使用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映射到您的实例,这使事情变得更整洁,更接近生产。