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

Mat*_*asN 5 amazon-web-services amazon-vpc aws-sdk aws-lambda

在过去的几个小时里,我一直在调试、配置和您命名它,但我似乎无法弄清楚为什么会发生这种情况。

我正在尝试调用一个 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

一个用于“私有”子网:“路由”->
目的地:10.0.0.0/16 目标:本地。
目的地:0.0.0.0/0 目标:我的国家

我已经确保我的两个 Lambda 都在同一个 VPC 上运行,它们都使用相同的安全组: 在此处输入图片说明

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

Mat*_*t D 3

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

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

我在之前的帖子中描述了我在类似情况下遵循的模式:/sf/answers/3077837871/