如何让 Lambda A 使用端点在同一 VPC 内调用 Lambda B?

问题描述 投票:0回答:1

我无法弄清楚如何在同一 VPC 内让 Lambda A 调用另一个 Lambda 函数而不使用 NAT 网关。

我尝试了各种方法,但似乎都不起作用。我有三个安全组:一个用于 Lambda A,一个用于 Lambda B,一个用于 VPC 终端节点。

这是我的设置:

Lambda A 的安全组(目的:调用 Lambda B 并获取负载)

  • 入境:无
  • 出站:VPC 端点安全组
  • 附:Lambda函数(Lambda A)

Lambda B 的安全组(目的:接收来自 Lambda A 或 VPC 端点的请求)

  • 入站:VPC 端点安全组
  • 出境:无
  • 附:Lambda函数(Lambda B)

VPC端点的安全组(目的:连接两个安全组)

  • 入站:Lambda A 的安全组
  • 出站:Lambda B 的安全组
  • 附加到: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 能够提供更清晰的错误报告,而不仅仅是记录持续时间。

c# amazon-web-services aws-lambda amazon-vpc vpc-endpoint
1个回答
0
投票

当 Lambda A 调用 Lambda B 时,请求将发送至 AWS Lambda 服务,而不是实际的函数。

因此,配置通常是:

Lambda 安全组

  • 出站:允许所有流量
  • 入站:无(Lambda 函数永远无法接收流量)

Lambda B 安全组

  • 出站:允许所有流量(更多是因为这是正常的,而不是因为它是必需的)
  • 入站:无(Lambda 函数永远无法接收流量)

Lambda 的 VPC 端点

  • 出站:无(没有来自 VPC 终端节点的流量)
  • 入站:允许所有(除非您想要真正严格并且仅允许来自 Lambda A)

您显示的配置应该可以工作,但事实并非如此。我怀疑这可能是 Lambda A 上安全组的出站规则。这就是为什么我建议在 Lambda A 上允许“所有出站”并在 VPC 终端节点上允许“所有入站”。从安全角度来看,这很好,因为 VPC 端点上的“入站”只能来自 VPC 中的其他资源(但不能来自 Internet)。

© www.soinside.com 2019 - 2024. All rights reserved.