首页 文章

AWS Lambda:如何为具有VPC访问权限的lambda函数设置NAT网关

提问于
浏览
30

根据this document,如果我需要通过VPC访问从我的Lambda函数访问Internet资源,我需要设置NAT网关 .

所以我按照this guide设置了NAT网关 . 但是,在我需要编辑子网的路由表以添加目的地:0.0.0.0/0和目标作为我的NAT网关的id的条目的阶段,我收到一个错误

An entry with this destination already exists

我检查并注意到,对于现有条目,目标是我的VPC的互联网网关 . 如果我用NAT网关ID替换该条目,我无法通过SSH从外部访问该VPC中的任何EC2实例 . 如何实现此VPC中所有EC2实例的情况

  • 只能通过SSH访问,其余流量被阻止

  • 能够完全访问同一VPC中的其他EC2实例

  • 有权访问此VPC的Lambda函数可以访问SQS和Kinesis等外部资源 .

3 回答

  • 9

    您需要IGW和NAT网关才能工作 .

    在公共子网(您希望从外部访问的子网)中,将0.0.0.0/0流量指向IGW网关 . NAT网关本身需要位于其中一个公共子网中 .

    在您要NAT的私有子网中,将指向0.0.0.0/0的流量指向NAT网关弹性网络接口 .

    如果0.0.0.0/0与网关绑定,则需要将其删除并添加指向NAT网关 .

    见:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html

  • 24

    我找到了一个很好的详细教程,介绍如何让你的lambda连接到VPC资源和互联网:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7

    快速浏览:

    • 为lambda设置新的子网(CIDR与现有子网不重叠) . 你需要:

    • 一个子网,它将指向NAT使用的Internet网关(IGW)(我们称之为A)

    • 几个指向你的lambda(B,C和D)使用的NAT

    • 添加NAT网关:将子网设置为A.

    • 将lambda VPC子网设置为B,C和D.

    • 创建2条路线表:

    • 指向目标为0.0.0.0/0的NAT

    • 指向目标为0.0.0.0/0的IGW(应该已存在)

    • 更新子网A以使用指向IGW的路由表

    • 更新子网B,C和D以使用指向NAT的路由表

    希望这可以帮助 .

  • 24

    您需要两个不同的子网 . 听起来好像你只有一个 .

    Lambda只能在VPC中使用私有子网 .

    私有子网的定义:默认路由是NAT实例(大多数位于不同的公有子网上)或NAT网关,并且子网中没有机器具有公共IP地址 . 在私有子网上允许使用具有公共IP地址的计算机,但在大多数情况下,它们将无法正常工作,因为这在技术上是错误配置 .

    公有子网的定义:默认路由是 igw-xxxxxxxx Internet Gateway对象,并且计算机分配了公共IP地址 . 公共子网上允许没有公共IP地址的计算机,但它们将无法访问Internet,因为这是一个配置错误 .

    听起来您正试图通过更改默认路由将现有子网从公共更改为私有 . 正如所料,这打破了其他事情 .

    另见Why do we need private subnet in VPC?

相关问题