【发布时间】:2018-10-11 21:59:26
【问题描述】:
过去几个小时我一直在调试、配置和你的名字,我似乎无法弄清楚为什么会发生这种情况。
我正在尝试调用一个 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)。
-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,所以我可能遗漏了一些东西。
【问题讨论】:
-
Lambda 函数应附加到您的私有子网。
-
为什么是我的私有子网?
-
值得一读的文档:docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-configuring。引用:重要 - 如果您的 Lambda 函数需要 Internet 访问权限,请不要将其附加到公共子网或没有 Internet 访问权限的私有子网。相反,仅将其附加到通过 NAT 实例或 Amazon VPC NAT 网关访问 Internet 的私有子网。
-
我确实做到了。
-
您可以使用简单的用户数据脚本将 EC2 启动到 Lambda 的子网和安全组中,该脚本使用 curl 访问公共网站。如果它有效,那么问题是特定于您的 Lambda。如果它不起作用,那么您的互联网路线就是问题所在。
标签: amazon-web-services aws-lambda aws-sdk amazon-vpc