替代AWS Lambda + NAT网关

时间:2019-06-05 02:17:53

标签: amazon-web-services aws-lambda nat amazon-vpc

快速介绍一下我的情况:我有一个VPC,其中包含一个API网关,该API网关将其调用重定向到我的Lambda函数,然后它们可以访问RDS实例和外部API调用(互联网访问)。

它的结构

由于功能需要访问RDS,因此我已将RDS和Lambda放在同一VPC中,从而在没有公共可访问性的情况下适当地保护了RDS。现在,由于Lambda位于VPC中,因此它们需要NAT网关才能访问Internet(几乎所有这些功能都需要调用第三方API),这是我面临的一个巨大问题。

问题

我有一个小项目可服务几个用户(范围从10到200个用户),并且使用我创建的无服务器设置,我希望每月的费用从 3.00美元到10.00美元强>。这就是没有单个 NAT网关的费用。现在,如果我们加上网关的价格,即 $0.045 per hour -而且我什至没有考虑每GB数据0.045美元的传输成本-,则为>每月30美元。不能再创建一个多可用区并减轻可能的可用区域故障,对我来说是愚蠢的,所以对于两个NAT网关> $ 60.00

这不仅对我不切实际,而且还会使通常遵循按需方法的整个无服务器结构的观点无效吗?

该如何解决?

我的备选方案之一是将Lambda移出VPC(意味着没有VPC),并通过某种机制访问RDS,而又不公开访问它-这就是我同样失败的地方,如何安全地访问Lambda。 Lambdas功能位于RDS VPC之外的情况下的RDS?

在最坏的情况下-我知道向公众公开我的RDS是很不好的-但是暴露它的漏洞有多大?

请记住,我并没有责怪AWS的价格,它只专注于寻找NAT网关的替代产品-我感谢解决此问题的建议。另外,对于完全错误的假设,我感到很抱歉,我是AWS生态系统的新手。

1 个答案:

答案 0 :(得分:1)

公共RDS实例解决了您的成本问题,但我强烈建议您避免这样做,因为这意味着任何人都可以发现并尝试对其进行身份验证。

Lambdas

  • 由于您的Lambda需要与Internet和VPC进行对话,因此它们必须位于VPC中。
  • Lambda也不能部署到公共子网中,因此它们必须位于私有子网中
  • 因为他们需要与Internet通讯,所以您的专用子网需要NAT

幸运的是,使用AWS托管的NAT网关并不是将NAT附加到私有子网的唯一选择,您还可以选择运行自己的NAT实例。

https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html

虽然不再建议这样做(管理NAT网关,所以首选),但是AWS仍然提供您可以使用做相同工作的NAT实例AMI。您应该能够在每个专用子网中运行一个t2.nano NAT实例(使用不同的AZ以获得HA),每个价格约为5美元。

这将为您每月节省50美元,这意味着您可以将RDS实例置于私有子网中,而无需公开暴露。唯一的缺点是现在您必须自己管理NAT实例(修补等)。