最近两个小时,我一直在调试,配置和命名,我似乎无法弄清楚为什么会这样。
我正在尝试调用一个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上运行,并且它们都使用相同的安全组:
这是我第一次使用VPC,因此我可能错过了一些东西。
答案 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