在过去的几个小时里,我一直在调试、配置和您命名它,但我似乎无法弄清楚为什么会发生这种情况。
我正在尝试调用一个 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)
一个用于“私有”子网:“路由”-> …
我一直在解决这个问题几个小时,也许它不可能,也许它是.
我在AWS中有一个VPC,有几个EC2实例和Lambda实例.
截至目前,lambda可以调用,ssh等等到EC2服务器没有问题.
我的lambdas在"Outbound"中使用的安全组只有HTTP,HTTPS和SSH.
我的ec2默认安全组只接受22个入站(来自我的Lambda安全组,和我的办公室IP).
如果我在公共子网上创建ec2实例,我和我的lambda函数都可以通过ssh访问它.
如果我在我的PRIVATE子网上创建它,我的lambdas可以ssh但我不能...
我真的必须拥有NAT SERVER才能实现这一目标吗?
TL:DR; 只有我的办公室和我的lambdas才能访问我的ec2实例.