Abd*_*naf 13 caching amazon-web-services amazon-elasticache amazon-vpc aws-lambda
我需要从单个lambda函数连接弹性缓存和dynamo db.我的代码是
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');
};
Run Code Online (Sandbox Code Playgroud)
我执行这个lambda代码而没有配置vpc,弹性缓存部分不工作,但发电机插入完美.
之后我按照以下步骤在我的帐户中为VPC设置了安装程序.
create vpc name:test-vpc-name CIDR block:172.31.0.0/16租期:默认
创建一个新子网.name tag:test-subnet-1a CIDR block:172.31.0.0/20
name tag:test-subnet-1b CIDR block:172.31.16.0/20
创建路由表名称标记:test-route-table
创建Internet网关名称:test-internet-gateway
附上VPC
路由所有路由中的出站0.0.0.0/0流量
创建路由表子网关联
创建NAT网关子网:test-subnet-1a
我也按照以下步骤配置了弹性缓存设置
创建子网缓存组名称:test-cache-group
创建弹性缓存
类型:redis群集名称:test-cache
子网缓存组:test-cache-group
最后,我在lambda函数上配置了新创建的vpc.然后redis-elastic缓存连接工作正常,但是dynamo db连接丢失了.我需要从单个lambda函数中正常工作.
我认为,使用NAT网关的VPC配置有些故障.
这个设置中的实际问题是什么?
Elr*_*ynn 12
现在有一个相对简单的解决方案:VPC Endpoints。
“以前,如果您希望 VPC 中的 EC2(elroy:或 lambda)实例能够访问 DynamoDB,您有两种选择。您可以使用 Internet 网关(带有 NAT 网关或分配您的实例公共 IP),或者您可以使用可以通过 VPN 或 AWS Direct Connect 将所有流量路由到本地基础设施,然后返回 DynamoDB。”
“DynamoDB 的 VPC 终端节点使您的 VPC 中的 Amazon EC2 实例能够使用其私有 IP 地址访问 DynamoDB,而无需暴露于公共 Internet...您的 EC2 实例不需要公共 IP 地址,也不需要 Internet 网关、NAT 设备或 VPC 中的虚拟私有网关。您可以使用终端节点策略来控制对 DynamoDB 的访问。您的 VPC 和 AWS 服务之间的流量不会离开 Amazon 网络。”
以上引用来自以下链接。请注意,对“EC2 实例”的引用也适用于 lambda 上下文。
请参阅https://aws.amazon.com/blogs/aws/new-vpc-endpoints-for-dynamodb/
和
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/vpc-endpoints-dynamodb.html
编辑以提供更多详细信息。
小智 5
Lambda和DynamoDB在AWS公共云中执行。两者都是在面向Internet的环境中执行的服务。否则,Elastic Cache Cluster是在您自己的VPC上运行的用户管理的服务。
向lambda函数提供对弹性缓存群集的访问权的第一个选项是使用NAT实例,将外部网络连接转移到VPC内部的Elastic Cache群集。您可以使用本文档中的说明来帮助您完成此任务。
第二种选择是您已经尝试过的选择。亚马逊表示,当您配置此选项时,并不意味着Lambda将在您的VPC中执行。它是什么定义Lambda容器的弹性网络接口来访问您的VPC。归根结底,我认为这没有什么区别。您可以在此处查看详细信息。
但关键是,执行lambda的容器只有一个弹性网络接口。如果将lambda配置为使用VPC,则网络接口将配置为使用私有IP访问子网,并且失去Internet连接。因此,除非您在VPC中具有配置的NAT实例/网关,否则它将无法访问DynamoDB。
按照你告诉我们的。您使用NAT网关配置了VPC。如果所有的配置都正确,则应该可以正常工作。也许您可以尝试使用fist选项,将lambda留在VPC之外,并配置NAT网关以将inboud连接路由到您的Elastic Cache Cluster。
为什么不尝试告诉我们结果呢?
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |