如何配置NAT以便与已具有Internet网关访问S3的Lambda一起使用?

问题描述:

我的设置是:如何配置NAT以便与已具有Internet网关访问S3的Lambda一起使用?

S3 (website) -> API Gateway -> Lambda -> RDS 
             -> S3 (configuration) 
             -> Shopify 
             -> Transactional Mail 

我有一个Internet网关设置为允许访问我的S3的配置,我需要连接一个NAT,让我做我的电话给了第三方。我试图只使用NAT(per this question),通过更改我的路由表条目0.0.0.0/0 - > {my NAT},但这只是导致无法访问我的S3配置存储区。

任何帮助将不胜感激!

编辑:为了清楚我已阅读文档,我遇到的问题是理解安全组,我的Lambdas和RDS共享以及它们所关联的子网之间的关系。

当我配置我的lambda成为安全组的一部分时,我的RDS实例处于,我需要将它与至少2个子网相关联......如果这些是新的子网,而不是与我的RDS实例相关的子网? AKA做lambda需要与RDS共享一个子网才能访问它?

+0

FWIW:事实证明,遵循给定的例子只是普通不起作用。我不知道这是否属于我所在的地区,但是有些人对VPC有更深入的了解,并且他们也无法使其正常工作。 –

如果lambda函数只需要访问VPC资源和S3,然后配置最简单的办法是将S3 Endpoint添加到您的VPC。如果您的Lambda函数需要访问VPC资源以及除S3和DynamoDB之外的其他资源(目前仅支持2个VPC端点的服务),则您的Lambda函数必须位于具有NAT网关的专用子网中。

公有子网中的实例可以选择拥有公共IP地址,但这不是必需的。 VPC中的Lambda函数永远不会获得公共IP地址,这就是为什么VPC内部的Lambda函数必须位于具有NAT网关的专用子网中才能访问Internet。

Lambda函数获取公共IP的唯一时间是当它们完全不在VPC中时。在这种情况下,他们可以访问VPC中除资源之外的任何内容。


有关“同一安全组”的评论请注意:是相同的安全组中不允许资源相互访问。 Lambda函数需要位于RDS安全组已授权访问的安全组中。关于子网,Lambda只需要位于同一个VPC的任何子网中,而不需要与RDS实例位于同一个子网中。

+0

这正是我想弄明白的,谢谢。 –

您需要将Lambda函数分配给具有NAT网关或NAT实例的专用子网。

如果一个子网有一个互联网网关,那么该子网称为“公共”,子网内的实例可以具有公共IP地址。如果子网具有NAT网关或NAT实例,则称为“专用”子网,子网内的实例只能拥有专用IP地址。

如果没有可用的子网,添加一个到您的VPC,然后添加一个NAT网关,调整路由表中为子网等

本文将帮助您了解如何VPC接入工程Lambda函数。

Configuring a Lambda Function to Access Resources in an Amazon VPC

+0

因此,为了访问我的RDS实例,我需要我的lambda在同一个安全组中,但它不需要共享它的子网? –