Amazon web services 无法从我的vpc配置的lambda功能连接dynamo Db
我需要从一个lambda函数连接弹性缓存和dynamo db。我的代码是Amazon web services 无法从我的vpc配置的lambda功能连接dynamo Db,amazon-web-services,caching,aws-lambda,amazon-vpc,amazon-elasticache,Amazon Web Services,Caching,Aws Lambda,Amazon Vpc,Amazon Elasticache,我需要从一个lambda函数连接弹性缓存和dynamo db。我的代码是 exports.handler = (event, context, callback) => { var redis = require("redis"); var client; function connectRedisClient() { client = redis.createClient(6379, "dgdfgdfgdfgdfgdfgfd.use1.cache
exports.handler = (event, context, callback) => {
var redis = require("redis");
var client;
function connectRedisClient() {
client = redis.createClient(6379, "dgdfgdfgdfgdfgdfgfd.use1.cache.amazonaws.com", { no_ready_check: true });
}
connectRedisClient();
client.set('sampleKey', 'Hello World', redis.print);
console.log("set worked");
client.quit();
var AWS = require("aws-sdk");
var docClient = new AWS.DynamoDB.DocumentClient();
var table = "dummy";
var year = 2015;
var title = "The Big New Movie";
var params = {
TableName: table,
Item: {
"userid": "manafcj",
"year": year,
"title": title,
"test1": [645645, 7988],
"info": {
"plot": "Nothing happens at all.",
"rating": 0
}
}
};
console.log("Adding a new item...");
docClient.put(params, function (err, data) {
if (err) {
console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Added item:", JSON.stringify(data, null, 2));
}
});
callback(null, 'Hello from Lambda');
};
我在没有配置vpc的情况下执行了这个lambda代码,弹性缓存部分不起作用,但dynamo插入完成得非常完美
之后,我通过以下步骤在我的帐户中设置VPC
类型:redis 集群名称:测试缓存 子网缓存组:测试缓存组
此设置中的实际问题是什么?Lambda和DynamoDB在AWS公共云中执行。两者都是在面向internet的环境中执行的服务。否则,弹性缓存集群是在您自己的VPC上运行的用户管理服务 让lambda功能访问弹性缓存群集的第一个选项是使用NAT实例将外部网络连接转发到VPC内的弹性缓存群集。您可以使用的说明来帮助您完成此任务 第二个选项是您已经尝试过的选项。Amazon表示,当您配置此选项时,并不意味着Lambda将在VPC内执行。它定义了Lambda容器的弹性网络接口以访问您的VPC。归根结底,我不认为这有什么区别。你可以看到细节 但关键是,执行lambda的容器只有一个弹性网络接口。如果将lambda配置为使用VPC,则网络接口将配置为使用专用IP访问子网,并失去internet连接。因此,除非您的VPC中有配置NAT实例/网关,否则它将无法访问DynamoDB 按照你告诉我们的。您使用NAT网关配置了VPC。如果所有配置均正确,则该功能应能正常工作。也许您可以尝试第一个选项,将lambda留在VPC之外,并配置NAT网关以将内部连接路由到弹性缓存集群
为什么不试着告诉我们结果呢?现在有一个相对简单的解决方案:VPC端点 “以前,如果您希望VPC中的EC2(elroy:或lambda)实例能够访问DynamoDB,您有两个选择。您可以使用Internet网关(带有NAT网关或为实例分配公共IP)或者,您可以通过VPN或AWS Direct Connect将所有流量路由到本地基础设施,然后返回DynamoDB。” “DynamoDB的VPC端点使VPC中的Amazon EC2实例能够使用其私有IP地址访问DynamoDB,而不暴露于公共Internet……您的EC2实例不需要公共IP地址,您的VPC中也不需要Internet网关、NAT设备或虚拟私有网关。您可以使用端点策略来控制对DynamoDB的访问。VPC和AWS服务之间的流量不会离开亚马逊网络。" 上面的引文来自下面的链接。请注意,对“EC2实例”的引用也适用于lambda上下文 看 及
编辑以提供更多详细信息。请查看此处的图片:您是否有0.0.0.0/0路由到您的NAT网关?我面临同样的问题。有解决方案吗?您可能希望签出。分步说明是我恢复到Lambda的internet连接所需的。希望有帮助。欢迎链接到解决方案,但请确保你的答案在没有它的情况下是有用的:这样你的其他用户就会知道它是什么以及它为什么在那里,然后引用你链接到的页面中最相关的部分,以防目标页面不可用。我确实修改了我的帖子,并提供了详细信息。如果删除否决票会很好。FWIW-我在这些li中遵循了这些说明上面的nks仍然无法连接。阻塞的是NACL。因此我将以下CIDR块(52.94.0.0/22,52.119.224.0/20)添加到入站和出站允许NACL。这些来自添加到路由表的条目:pl-02cxxxxx(com.amazonaws.us-east-1.dynamodb,52.94.0.0/22,52.119.224.0/20)。希望这对其他人有所帮助。我遵循AWS官方文档并创建了端点,但我还必须为分配给我的VPC的网络ACL添加额外的规则,其中包含可在此处找到的dynamodb IP地址:(奇怪!端点旨在消除对外部通信的需要)