AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置 Lambda 函数以访问 VPC 中的资源

您可以配置函数来连接到您账户中 Virtual Private Cloud (VPC) 中的私有子网。使用 Amazon Virtual Private Cloud (Amazon VPC) 为资源(如数据库、缓存实例或内部服务)创建专用网络。将您的函数连接到 VPC 来在执行期间访问私有资源。

Lambda 在函数的 VPC 配置中为每个安全组和子网组合创建一个弹性网络接口,此过程可能需要一分钟左右的时间。 连接到相同子网的多个函数共享网络接口,因此将其他函数连接到已具有 Lambda 托管网络接口的子网要快得多。如果您有许多函数或非常繁忙的函数,Lambda 可能会创建额外的网络接口。

Lambda 函数无法直接连接到具有专用实例租赁的 VPC。要连接到专用 VPC 中的资源,请使其与具有默认租赁的第二个 VPC 对等

执行角色和用户权限

要连接到 VPC,您的函数的执行角色必须具有以下权限。

执行角色权限

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

这些权限包含在 AWSLambdaVPCAccessExecutionRole 托管策略中。

要配置函数来连接到 VPC,您需要以下权限。

用户权限

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

使用 Lambda API 配置 Amazon VPC 访问权限

要在创建期间将函数连接到 VPC,请将 vpc-config 选项与私有子网 ID 和安全组列表结合使用。

$ aws lambda create-function --function-name my-function \ --runtime nodejs10.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

对于现有函数,请将相同的选项与 update-function-configuration 命令结合使用。

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

要断开函数与 VPC 的连接,请使用子网和安全组的空白列表更新函数配置。

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

这些命令使用以下 API。

对 VPC 连接函数的 Internet 和服务访问

默认情况下,Lambda 在可访问 AWS 服务和 Internet 的安全 VPC 中运行您的函数。在将函数连接到您账户中的 VPC 时,除非 VPC 提供访问权限,否则它无法访问 Internet。

注意

有多个服务提供 VPC 终端节点。您可以使用 VPC 终端节点从 VPC 内连接到 AWS 服务,而无需 Internet 访问权限。

从私有子网访问 Internet 需要网络地址转换 (NAT)。要使您的函数能够访问 Internet,请将出站流量路由到公共子网中的 NAT 网关。NAT 网关具有公共 IP 地址,可以通过 VPC 的 Internet 网关连接到 Internet。有关更多信息,请参阅 Amazon VPC 用户指南 中的 NAT 网关

VPC 配置示例

本指南的 GitHub 存储库中提供了您可以与 Lambda 函数一起使用的 VPC 配置的示例 AWS CloudFormation 模板。存在以下两种模板:

  • vpc-private.yaml – 此 VPC 具有两个私有子网以及适用于 Amazon Simple Storage Service 和 Amazon DynamoDB 的 VPC 终端节点。您可以使用此模板为不需要 Internet 访问权限的函数创建 VPC。此配置支持与 AWS 软件开发包一起使用 Amazon S3 和 DynamoDB,以及通过本地网络连接访问相同 VPC 中的数据库资源。

  • vpc-privatepublic.yaml – 此 VPC 具有两个私有子网、VPC 终端节点、一个具有 NAT 网关的公有子网,以及一个 Internet 网关。来自私有子网中函数的 Internet 相关流量将通过路由表路由到 NAT 网关。

要使用模板创建 VPC,请选择AWS CloudFormation 控制台中的 Create stack (创建堆栈),然后按照说明操作。