【问题标题】:How to test lambda function against a localhost running application?如何针对本地主机运行的应用程序测试 lambda 函数?
【发布时间】:2021-05-09 03:01:06
【问题描述】:

我正在使用 AWS,我的主要目标是使用 java lambda 函数将 SOAP 请求发送到 SOAP UI 模拟项目。

目前,如果我在 Eclipse 中运行代码,我确实可以成功发送请求,因为我收到了 SOAP 响应。

但是,如果我将代码上传到 lambda 函数,则会收到拒绝连接错误:

java.net.ConnectException: Connection refused (Connection refused)

顺便说一句,我的 lambda 函数没有 VPC 配置。

任何人都知道如何针对我的 SOAP UI 模拟项目测试我的 lambda 函数代码?

非常感谢您提前提供任何提示:)

【问题讨论】:

  • 你的模拟项目在本地运行吗?这可能是可能的,但工作量很大。您需要将 lambda 放入 VPC,然后connect yourself to the VPC,然后配置该 VPC / 其子网中的路由表,以某种方式将一些流量导向您自己的机器,并确保您的防火墙不会阻止它,等等。除非你有很多 AWS 网络经验,否则这不会很有趣 - 如果可能的话。

标签: amazon-web-services aws-lambda


【解决方案1】:

除非您出于测试目的而在 AWS 中运行 lambda 有硬性要求,并且 @luk2302 已经提到,要使网络朝着正确的方向发展需要付出相当大的努力。

您实际上可以在本地运行 lambda 并使用您的 UI 进行测试。

AWS 在gallery.ecr.aws 中发布了java 运行时的 lambda docker 映像

使用提供的基础镜像在本地打包您的代码:

docker build -t <image name> .

在本地运行您的图像:

docker run -p 9000:8080 <image name>

在单独的终端中,您可以使用 cURL 在本地调用该函数:

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'

另一种选择是使用LocalStack - A fully functional local AWS cloud stack

【讨论】:

  • 基本上,我的目标是使用 lambda 函数每 10 分钟对外部第三方 Web 服务执行一次请求,并将有效负载保存在 dynamoDB 中。但由于我只是在玩,作为我的第一步,我考虑过使用 SOAP UI 来模拟数据并模拟对外部 Web 服务的请求。
  • @NelsonDias 在您的代码中,您仍然可以向第三方发出请求,前提是端点不限于某个 IP 地址,或者网络的方式无法在 AWS 之外调用。
  • @NelsonDias 好吧,外部第三方服务与本地托管服务完全不同。那时你的 lambda 只需要在互联网上调用一些 api,这根本不应该是一个问题。
  • 出于测试目的,我的想法是针对 SOAP UI 或在我的笔记本电脑上运行的 Spring Boot 应用程序执行一些请求。老实说,我认为这样做要容易得多。
  • @NelsonDias 为 lambda 构建容器映像并使用相同的测试。它走在正确的道路上,当有人想要测试应用程序或者您想要在构建环境中运行单元测试用例时,它可能会给您带来优势。不管怎样,你自己挑吧。
猜你喜欢
  • 2012-06-28
  • 2018-08-07
  • 2022-11-20
  • 2019-01-25
  • 2019-01-12
  • 2023-04-11
  • 1970-01-01
  • 2016-02-26
  • 2019-07-28
相关资源
最近更新 更多