AWS 将 VPC 内的 Lambda 调用到另一个 VPC 中的另一个 Lambda

AWS call Lambda inside VPC to another Lambda in another VPC

可以从另一个 VPC 中的另一个 lambda 调用位于一个 VPC 中的 lambda 函数。

我正在尝试使用 AWS VPC 端点执行此操作,但我无法执行。它标记错误 403。我正在执行以下步骤:https://aws.amazon.com/es/blogs/compute/introducing-amazon-api-gateway-private-endpoints/

https://cedrus.digital/aws-privatelink-with-api-gateway-and-lambda-functions/

我不确定是否应在调用 lambda 或接收请求的 VPC 中创建 VPC 端点。

甚至,API网关资源策略是这样写的:

{
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

并将 VPC 端点策略设为完全访问。

要通过 API 调用调用 AWS Lambda 函数,调用实体必须能够访问 Internet。调用实体是在同一个 VPC 中、不同的 VPC 中,甚至不在一个 VPC 中都没有关系。重要的是请求可以发送到 AWS Lambda API 端点。

如果调用 Lambda 函数在 VPC 中,请确保它可以访问 Internet。这通常需要:

  • Lambda 函数位于 私有子网
  • 在 public 子网
  • 中有一个 NAT 网关
  • 私有子网的路由Table0.0.0.0/0流量定向到NAT网关

或者,如果调用 Lambda 函数连接到 VPC,则它会自动接收对 Internet 的访问。

"called" Lambda 函数连接的是什么(VPC 与否)也无关紧要。激活此Lambda函数的控制平面在互联网上,与Lambda函数本身连接到哪里无关。

有几种方法可以从另一个 lambda 调用一个 lambda。

Lambda 直接调用其他 lambda

当您使用 aws-sdk 的调用函数从另一个 lambda(被调用者)调用 lambda(调用者)时,正如答案中已经提到的那样,lambda(调用者)应该具有互联网连接。因为 aws-sdk 默认情况下调用是通过互联网进行的。

因此,lambda 应该部署在 public 子网上(不推荐),或者您应该有一个 Nat 网关(或者 Nat 实例更便宜),这样 lambda 就可以通过互联网。

Lambda通过Api网关调用另一个lambda

如果调用的 lambda 具有互联网连接,您甚至不需要考虑此选项。

您确实可以在目标 lambda 端为 api 网关创建私有 VPC 端点。然后调用 lambda 可以通过 VPC 端点的 dns 进行 https 调用 url.

为此,您的 VPC 端点应该可以从您要进行 http 调用的其他 VPC 访问。

因此,VPC 之间的 vpc 对等将使其成为可能。好消息是现在可以通过 vpc 对等访问 VPC 端点。

希望对您有所帮助。

参考: https://aws.amazon.com/about-aws/whats-new/2019/03/aws-privatelink-now-supports-access-over-vpc-peering/