我无法弄清楚如何在同一 VPC 内让 Lambda A 调用另一个 Lambda 函数而不使用 NAT 网关。
我尝试了各种方法,但似乎都不起作用。我有三个安全组:一个用于 Lambda A,一个用于 Lambda B,一个用于 VPC 终端节点。
这是我的设置:
Lambda A 的安全组(目的:调用 Lambda B 并获取负载)
Lambda B 的安全组(目的:接收来自 Lambda A 或 VPC 端点的请求)
VPC端点的安全组(目的:连接两个安全组)
我已启用 DNS 主机名 和 DNS 解析。在 VPC 终端节点中,我仅应用了 VPC 终端节点安全组,没有应用其他安全组。同样,对于两个 Lambda 函数,我只设置了上面提到的内容。
关于代码,我保持不变,并像不在VPC内一样调用它。
用于调用的代码:
AmazonLambdaClient amazonLambdaClient = new AmazonLambdaClient(new BasicAWSCredentials("MyAccessKey", "MySecretKey"), RegionEndpoint.USEast1);
InvokeResponse mongoDbConnectCentralInsertInvokeResponse = await amazonLambdaClient.InvokeAsync(new InvokeRequest
{
FunctionName = "LambdaB",
Payload = new JObject
{
}.ToString()
});
在 Lambda A 上运行测试时,它仅运行我设置的持续时间,即 30 秒,这表明无法连接到某处的常见迹象。我希望 CloudWatch Logs 能够提供更清晰的错误报告,而不仅仅是记录持续时间。
当 Lambda A 调用 Lambda B 时,请求将发送至 AWS Lambda 服务,而不是实际的函数。
因此,配置通常是:
Lambda 安全组
Lambda B 安全组
Lambda 的 VPC 端点
您显示的配置应该可以工作,但事实并非如此。我怀疑这可能是 Lambda A 上安全组的出站规则。这就是为什么我建议在 Lambda A 上允许“所有出站”并在 VPC 终端节点上允许“所有入站”。从安全角度来看,这很好,因为 VPC 端点上的“入站”只能来自 VPC 中的其他资源(但不能来自 Internet)。