【问题标题】:How can I make my Lambda function talk to a server running on my local machine?如何让我的 Lambda 函数与本地机器上运行的服务器通信?
【发布时间】:2018-03-16 16:21:35
【问题描述】:

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

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

有什么方法可以从 Lambda 内部调用我的本地机器的开发服务器,而无需继续部署到 AWS(或其他远程服务器)?

【问题讨论】:

  • 您可能还想查看在本地测试 Lambda 函数的选项,包括 SAM Local 和各种 GitHub 项目。
  • 那么为什么不能在没有 Lambda 的情况下测试服务器功能呢?无论如何,它只是对服务器进行 http[s] 调用,对吗?可以在 lambda 环境之外进行测试吗?

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


【解决方案1】:

如果您在 VPC 和本地网络之间设置 VPN 或 Direct Connect,这可能是可能的。

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

【讨论】:

    【解决方案2】:

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

    一般来说你需要的是:

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

    否则,如果您的笔记本电脑位于某个特殊的安全网络中,则按照 chris 的建议使用 VPN,以确保您的服务不会暴露在 Internet 上。

    一些可能有帮助的链接:

    【讨论】:

      【解决方案3】:

      我将针对 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 环境变量,但您也可以为 DEV 环境编写配置。与大多数解释型语言相比,Java 语言为此类泛化和抽象提供了更丰富的工具。

      【讨论】:

        【解决方案4】:

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

        您是否主要关心使用自己喜欢的 IDE 进行调试?如果没有,那么设置只为测试而启动的 EC2 服务器很便宜。不使用时不收费。或者,如果您需要更丰富的环境来测试和调试它,也可以查看 AWS workspaces

        还请记住,您的 EC2 实例可以使用 Route 53 私有主机区域将任意 url 映射到您的实例,这使事情变得更清洁,更接近生产环境。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 2017-04-06
          • 1970-01-01
          • 1970-01-01
          • 2021-04-22
          相关资源
          最近更新 更多