根据this document,如果我需要通过VPC访问从我的Lambda函数访问互联网资源,我需要设置NAT网关。
所以我跟着this guide设置了NAT网关。但是,在我需要编辑子网的路由表以添加目的地:0.0.0.0/0和目标作为我的NAT网关ID的条目时,我收到错误
$scope.remove = function(_id,rindex) {
alert('Are you sure you want to delete?');
$http({
url: 'http://localhost:7200/api/manage-product',
method: 'POST',
data:{productId: _id},
}).success(function(res) {
console.log('another success');
}, function(error) {
console.log(error);
alert('here');
});
}
我检查并注意到,对于现有条目,目标是我的VPC的互联网网关。如果我用NAT网关ID替换该条目,我无法通过SSH从外部访问该VPC中的任何EC2实例。如何实现此VPC中所有EC2实例的情况
答案 0 :(得分:30)
我找到了一个很好的详细教程,介绍如何让lambda连接到VPC资源和互联网:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
快速浏览:
希望这有帮助。
答案 1 :(得分:26)
您需要IGW和NAT网关才能实现此目的。
在公共子网(您希望从外部访问的子网)中,将0.0.0.0/0流量指向IGW网关。 NAT网关本身需要位于其中一个公共子网中。
在要将NAT指向的私有子网中指向0.083.0/0的NAT网关弹性网络接口。
如果0.0.0.0/0已经绑定到网关,则需要将其删除并添加指向NAT网关。
请参阅: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html
答案 2 :(得分:9)
您需要两个不同的子网。听起来好像你只有一个。
Lambda只能在VPC中使用私有子网。
私有子网的定义:默认路由是NAT实例(大多数位于不同的公有子网上)或NAT网关,并且子网中的 no 计算机具有公共IP地址。在私有子网上允许使用具有公共IP地址的计算机,但在大多数情况下,它们将无法正常工作,因为这在技术上是错误配置。
公有子网的定义:默认路由是=IF(B2=B1,A1+1,1)
Internet网关对象,并且计算机分配了公共IP地址。公共子网上允许没有公共IP地址的计算机,但它们将无法访问Internet,因为这是一个配置错误。
听起来您正试图通过更改默认路由将现有子网从公共更改为私有。正如所料,这打破了其他事情。
答案 3 :(得分:0)
嗨,我开发了一个分步教程,其中包含有关它的明确屏幕截图:
第一部分
第二部分
答案 4 :(得分:0)
要在VPC和互联网访问中使用Lambda:
我相信,您中的大多数人已经拥有了IGW,即您正在VPC内部并与Internet一起工作,因此无需创建新的IGW。
步骤对我有用:
在主VPC下创建一个新的子网(建议2个或更多)。给它加上一个带有掩码的新CIDR,您会认为这将是Lambda中使用的网络接口的数量。(我做了X.X.X.X / 28,因为对我们来说足够了)
创建NAT网关,将其添加到弹性IP或创建新的EIP并将其添加到VPC下的主子网中。 (请记住,如果您已经有Internet Gateway,它将可以正常工作)
创建路由表,并将0.0.0.0/0路由添加到我们已创建的目标-Nat网关ID(nat-xxxxxxxxxxxxxxxxxxxx)(第2步)
为您的lambda创建新的安全组(从ALL到ALL)以与Internet一起使用。我相信向互联网的lambda添加0.0.0.0/0是安全的。
打开lambda-选择您的VPC,添加您正在使用的SG,然后添加从步骤4创建的新版本以使用Internet。按保存并测试。
答案 5 :(得分:-1)