gpt4 book ai didi

amazon-web-services - 无法从我的 vpc 配置的 lambda 函数连接 dynamoDb

转载 作者:行者123 更新时间:2023-12-03 23:53:07 25 4
gpt4 key购买 nike

我需要从单个 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 block :172.31.0.0/16
    租户:默认
  • 创建一个新子网。
    名称标签:test-subnet-1a
    CIDR block :172.31.0.0/20

    名称标签:test-subnet-1b
    CIDR block :172.31.16.0/20
  • 创建路由表
    名称标签:测试路由表
  • 创建互联网网关
    名称:测试互联网网关
  • 附加 VPC
  • 路由路由中的所有出站 0.0.0.0/0 流量
  • 创建路由表子网关联
  • 创建NAT网关
    子网:test-subnet-1a

  • 我也通过以下步骤配置了我的弹性缓存设置
  • 创建子网缓存组
    名称:测试缓存组
  • 创建弹性缓存
    类型:redis
    集群名称:测试缓存

    子网缓存组:test-cache-group

  • 最后,我在我的 lambda 函数上配置了新创建的 vpc。然后 redis-elastic 缓存连接工作正常,但 dynamo db 连接丢失。我需要从单个 lambda 函数中正常工作。

    我认为,NAT 网关的 VPC 配置存在一些问题。

    此设置中的实际问题是什么?

    最佳答案

    Lambda 和 DynamoDB 在 AWS 公共(public)云中执行。两者都是在面向互联网的环境中执行的服务。否则,弹性缓存集群是在您自己的 VPC 上运行的用户托管服务。

    向 lambda 函数授予对弹性缓存集群的访问权限的第一个选项是使用 NAT 实例将外部网络连接转发到 VPC 内的弹性缓存集群。您可以从 this document 获取使用说明帮助您完成这项任务。

    第二个选项是您已经尝试过的选项。亚马逊表示,当您配置此选项时,并不意味着 Lambda 将在您的 VPC 内执行。它是什么定义了 Lambda 容器的弹性网络接口(interface)来访问您的 VPC。归根结底,我认为这没有什么不同。可以查看详情here .

    但关键是,执行 lambda 的容器只有一个弹性网络接口(interface)。如果您将 lambda 配置为使用您的 VPC,则网络接口(interface)将配置为使用私有(private) IP 访问您的子网并失去互联网连接。因此,除非您在 VPC 中配置了 NAT 实例/网关,否则它将无法访问 DynamoDB。

    正如你告诉我们的那样。您为 VPC 配置了 NAT 网关。如果所有配置都正确,这应该可以工作。也许您可以尝试第一个选项,将您的 lambda 留在您的 VPC 之外并配置 NAT 网关以将入站连接路由到您的弹性缓存集群。

    为什么不试着告诉我们结果呢?

    关于amazon-web-services - 无法从我的 vpc 配置的 lambda 函数连接 dynamoDb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39725326/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com