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

时间:2018-10-11 13:36:00

标签: amazon-web-services aws-lambda aws-sdk amazon-vpc

最近两个小时,我一直在调试,配置和命名,我似乎无法弄清楚为什么会这样。

我正在尝试调用一个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个VPC。
 -2x子网(1x ipv4 10.0.0.0/17为私有,1x ipv4 10.0.128.0/17为Public)。
 -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上运行,并且它们都使用相同的安全组:enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

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