【发布时间】:2018-01-25 04:41:33
【问题描述】:
有问题的 EC2 实例位于私有子网中,并且没有通过设计启用通过 NAT 的 Internet 访问。 目前,我的 Lambda 位于连接到同一 VPC 的公共子网中。
当我尝试调用 Lambda 时,我收到 Connection to lambda.us-east-1.amazonaws.com timed out。
【问题讨论】:
标签: aws-lambda amazon-vpc
有问题的 EC2 实例位于私有子网中,并且没有通过设计启用通过 NAT 的 Internet 访问。 目前,我的 Lambda 位于连接到同一 VPC 的公共子网中。
当我尝试调用 Lambda 时,我收到 Connection to lambda.us-east-1.amazonaws.com timed out。
【问题讨论】:
标签: aws-lambda amazon-vpc
当您尝试调用 Lambda 函数时,Lambda 函数在哪里都没有关系。这是因为您在调用 Lambda 函数时并未直接连接它。您正在连接到 AWS API 以调用 Lambda 函数。您能够从私有子网中的 EC2 实例执行此操作的唯一方法是通过 NAT 网关。
【讨论】:
Amazon EC2 实例无法“访问 Lambda 函数”,但它们当然可以调用 AWS Lambda API 来调用 Lambda 函数。
但是,API endpoints for AWS services 都驻留在 Internet 上。因此,调用 API需要访问 Internet。 (目前有两个例外是 Amazon S3 和 Amazon DynamoDB,它们可以使用 VPC 端点 来访问 API 端点。)
因此,要从私有子网中的 Amazon EC2 实例调用 Lambda 函数,您需要一个 NAT 网关 和一个配置为将 Internet 绑定流量发送到 NAT 网关的私有路由表。
Lambda 函数连接到您的公有子网这一事实与调用 Lambda 函数无关。它只是意味着 Lambda 函数在运行时可以访问 VPC 内的资源。 (事实上,Lambda 函数通常连接到私有子网而不是公共子网,因为它们只有在其流量通过 NAT 网关路由时才能访问 Internet。)
【讨论】: