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

Man*_*ngh 34 amazon-web-services aws-lambda

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

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

An entry with this destination already exists
Run Code Online (Sandbox Code Playgroud)

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

  • 只能通过SSH访问,其余流量被阻止
  • 能够完全访问同一VPC中的其他EC2实例
  • 可以访问此VPC的Lambda函数可以访问SQS和Kinesis等外部资源.

Vin*_*bbe 33

我找到了一个很好的详细教程,介绍如何让你的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的路由表

希望这可以帮助.

  • 我添加了详细的演练.不像链接的tuto那么详细,但这正是我所做的,似乎回答了原来的问题. (6认同)
  • 链接的文章非常有用,但存在一些错误-例如,它使用“ AWS服务”来表示“仅在VPC中的服务”,但实际上许多AWS服务都在公共互联网上(例如默认的S3设置) (2认同)

Mir*_*cea 28

您需要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

  • 我需要在Lambda函数的配置中选择私有子网 (7认同)

Mic*_*bot 9

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

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

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

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

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

另请参阅为什么我们在VPC中需要私有子网?