AWS Lambda 是 Amazon Web Services 提供的无服务器计算服务,允许你运行代码而不需要预配置或管理服务器。当你在 AWS Lambda 中使用 VPC,你可以确保 Lambda 函数可以访问在 VPC 内的资源,例如 RDS 数据库、ElastiCache、EC2 实例等。
以下是关于 AWS Lambda 和 VPC 的一些重要概念和详细信息:
Lambda 在 VPC 内的执行:默认情况下,Lambda 函数在 AWS 的管理环境中执行,并且可以直接访问公共互联网。但是,当你配置 Lambda 函数以在 VPC 内执行时,该函数无法直接访问公共互联网,只能访问 VPC 内的资源。
**ENI (Elastic Network Interface)**:当 Lambda 函数在 VPC 中执行时,Lambda 在背后创建一个或多个 ENI 以连接到 VPC 子网。每个 ENI 提供一个 VPC 内的 IP 地址。Lambda 使用这些 ENI 来访问 VPC 内的资源。当然在Lambda的子网和安全组配置一样的时候,会使用一张ENI。
子网和安全组:当你配置 Lambda 函数以在 VPC 中执行时,你需要指定至少一个 VPC 子网和一个安全组。子网决定了函数在 VPC 内的位置,而安全组则定义了网络流量规则。虽然 Lambda 函数本身不监听任何端口(因此不接受传统意义上的入站连接),但与其关联的安全组的入站规则仍然适用于 VPC 内的其他资源。例如,你可以设置一个规则,只允许特定的 EC2 实例访问与 Lambda 关联的 RDS 数据库。
冷启动时间:当在 VPC 中执行 Lambda 函数时,由于需要创建 ENI以及环境运行时安装,所以函数的冷启动时间可能会增加。
访问公共互联网:Lambda 函数本身没有固定的公共 IP 地址,如果 Lambda 函数需要在 VPC 内执行并访问公共互联网(例如调用其他 AWS 服务或者调用外部 API),你需要在 VPC 中设置一个 NAT 网关或 NAT 实例,并确保 Lambda 函数与能够路由到 NAT 的子网相关联。
连接的资源:一旦 Lambda 函数配置为在 VPC 中运行,它可以直接与 VPC 内的其他资源通信,例如 Amazon RDS、Amazon Redshift、ElastiCache、EC2 实例等。
IAM 角色和权限:要在 VPC 中运行 Lambda 函数,相应的 IAM 角色需要有权创建 ENI 和进行其他网络操作。
总的来说,当你需要从 AWS Lambda 函数访问 VPC 内的资源时,将 Lambda 函数配置为在 VPC 中运行是非常有用的,但这也引入了附加的配置考虑和可能的性能影响。