【发布时间】:2017-02-05 02:59:30
【问题描述】:
我需要从单个 lambda 函数连接弹性缓存和发电机数据库。我的代码是
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 代码,弹性缓存部分不工作,但发电机插入完美。
之后,我按照以下步骤在我的帐户中设置了 VPC。
创建 vpc 名称:测试-vpc-名称 CIDR 块:172.31.0.0/16 租户:默认
-
创建一个新子网。 名称标签:test-subnet-1a CIDR 块:172.31.0.0/20
名称标签:test-subnet-1b CIDR 块:172.31.16.0/20
创建路由表 名称标签:测试路由表
创建互联网网关 名称:test-internet-gateway
附加 VPC
路由路由中的所有出站 0.0.0.0/0 流量
创建路由表子网关联
创建 NAT 网关 子网:test-subnet-1a
我还按照以下步骤配置了我的弹性缓存设置
创建子网缓存组 名称:测试缓存组
-
创建弹性缓存
类型:redis 集群名称:test-cache子网缓存组:test-cache-group
最后,我在我的 lambda 函数上配置了新创建的 vpc。然后 redis-elastic 缓存连接工作正常,但是 dynamo db 连接丢失。我需要从单个 lambda 函数中正常工作。
我认为,使用 NAT 网关的 VPC 配置存在一些问题。
此设置中的实际问题是什么?
【问题讨论】:
-
看这里的图片:docs.aws.amazon.com/AmazonVPC/latest/UserGuide/… 你有 0.0.0.0/0 路由到你的 NAT 网关吗?
-
我也面临同样的问题。有什么解决办法吗?
-
您可能想查看this article。一步一步的说明是我恢复到我的 Lambda 的互联网连接所需要的。希望对您有所帮助。
标签: amazon-web-services caching aws-lambda amazon-vpc amazon-elasticache