我可以从私有 VPC 中的 EC2 实例访问我的 Lambda 吗?

Can I access my Lambda from EC2 instance within private VPC?

有问题的 EC2 实例位于私有子网中,并且在设计上没有通过 NAT 启用 Internet 访问。 目前,我的 Lambda 在连接到同一 VPC 的 public 子网中。

当我尝试调用 Lambda 时,我收到 Connection to lambda.us-east-1.amazonaws.com timed out

当您尝试调用 Lambda 函数时,Lambda 函数位于何处根本无关紧要。那是因为您在调用 Lambda 函数时并未直接连接到它。您正在连接到 AWS API 以调用 Lambda 函数。您能够从私有子网中的 EC2 实例执行此操作的唯一方法是通过 NAT 网关。

Amazon EC2 实例不能"access a Lambda function",但它们当然可以调用 AWS Lambda API 以 调用 Lambda 函数。

但是,API endpoints for AWS services 都驻留在 Internet 上。因此,调用 API 需要访问 Internet。 (目前有两个例外是 Amazon S3 和 Amazon DynamoDB,它们可以使用 VPC 端点 来访问 API 端点。)

因此,要从私有子网中的 Amazon EC2 实例调用 Lambda 函数,您需要一个 NAT 网关 和一个配置为发送的私有路由 table到 NAT 网关的 Internet 绑定流量。

Lambda 函数连接到您的 public 子网这一事实与调用 Lambda 函数无关。它只是意味着 Lambda 函数在 运行 时可以访问 VPC 内的资源。 (事实上​​,Lambda 函数通常连接到私有子网而不是 public 子网,因为它们只有在其流量通过 NAT 网关路由时才能访问互联网。)