从 VPC 内的另一个 Lambda 函数调用 Lambda 函数

问题描述 投票:0回答:2

过去几个小时我一直在调试、配置,但我似乎不明白为什么会发生这种情况。

我正在尝试调用一个 lambda 函数,该函数只是从 ec2 检索基本信息。当我在 aws 控制台中测试这个 lambda 函数时,它似乎工作正常。但是,使用以下代码在另一个 lambda 中调用它;

    BasicAWSCredentials awsCreds = new BasicAWSCredentials("key1" , "key2");
    AWSLambdaClientBuilder builder = AWSLambdaClientBuilder.standard()
            .withRegion("eu-west-1")
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds));
    AWSLambda client = builder.build();

    InvokeRequest req = new InvokeRequest()
            .withFunctionName("GetWhateverIneed");
    InvokeResult result = client.invoke(req);

它只是超时了。没有任何响应...两个 Lambda 都连接到 VPC 和所有子网

我认为是我的新 VPC 导致了此问题。我的 VPC 包括:

1 个专有网络。
-2x 子网(1x 私有子网,ipv4 10.0.0.0/17,1x 公共子网,ipv4 10.0.128.0/17)。
-1x IGW 连接到私有子网。
-1x NAT 网关连接到公共子网。
-2x 端点(一个用于 Ec2,一个用于 SecretsManager)

我还配置了两个路由表, 一个用于“公共”子网: “路线”->
目的地:10.0.0.0/16 目标:本地
目的地:0.0.0.0/0 目标:我的互联网网关(IGW)

一个用于“私有”子网: “路线”->
目的地:10.0.0.0/16 目标:本地 .
目的地:0.0.0.0/0 目标:我的 nat

我已确保我的两个 Lambda 都在同一个 VPC 上运行,它们都使用相同的安全组:

这是我第一次使用 VPC,所以我可能错过了一些东西。

amazon-web-services aws-lambda aws-sdk amazon-vpc
2个回答
2
投票

如果您的 Lambda 函数附加了 VPC,则它需要能够通过您的 VPC 与 AWS API 进行通信。 Lambda 不会通过网络与其他 Lambda 通信,而是使用 AWS API 或 API 网关发起请求,后者将请求传递给 Lambda 函数。

如果您需要附加 VPC 的 Lambda 来启动另一个 Lambda,则它需要能够通过互联网访问 AWS API 或 API 网关。或者,您可以通过将 VPC 端点添加到 API 网关服务,将其全部保留在专用网络上。

我在类似情况下遵循的模式在我的上一篇文章中有描述:https://stackoverflow.com/a/43969112/6427978


0
投票

我在面临同样的问题时遇到了这个主题,并且我找到了一个尚未提及的解决方案,所以也许对于下一个寻找它会有所帮助。

当您在同一 VPC 中拥有 lambda 时,您可以添加 VPC 终端节点,但不需要添加到 API 网关服务。因此,要调用另一个 lambda,请转到 VPC 设置 -> 端点并创建一个。

  • com.amazonaws.eu-central-1.sqs
    -> 允许从 VPC 中的 lambda 发布到 sqs
  • com.amazonaws.eu-central-1.lambda
    -> 允许在同一 VPC 中调用 lambda
© www.soinside.com 2019 - 2024. All rights reserved.