gpt4 book ai didi

python - 使用 Python 从 AWS Lambda 连接到 DocumentDB

转载 作者:行者123 更新时间:2023-12-05 03:46:35 29 4
gpt4 key购买 nike

我正在尝试从 Lambda 函数连接到 DocumentDB。

我已经按照 tutorial 配置了我的 DocumentDB并且可以通过 cloud9 命令提示符访问它。

documentDB 集群是两个安全组的一部分。第一个安全组称为 demoDocDB,第二个称为 default,是 vpc defulat 安全组。

demoDocDB 的入站规则将请求从 cloud9 实例转发到运行我的 documentDB 数据库的端口 27017。

defualt 安全组的入站规则指定所有流量、所有端口范围和其自身的来源。 VPC ID 是默认的 VPC 设置。

在编辑 VPC 详细信息时,我在 lambda 中输入:

  1. VPC - 默认 VPC
  2. 子网 - 选择所有 3 个可用的子网
  3. 安全组 - VPC 的默认安全组

该函数在写入数据库时​​已经工作了两次,其余时间它已经超时,Lambda 函数的超时是 2 分钟,但在到达之前它会抛出超时错误。

[ERROR] ServerSelectionTimeoutError: MY_DATABASE_URL:27017: [Errno -2] Name or service not known

下面的代码片段是试图执行的代码,该函数永远不会到达 print("INSERTED DATA") 它在插入语句期间超时。

def getDBConnection():
client = pymongo.MongoClient(***MY_URL***)

##Specify the database to be used
db = client.test
print("GOT CONNECTION",db)

##Specify the collection to be used
col = db.myTestCollection
print("GOT COL",col)

##Insert a single document
col.insert_one({'hello':'Amazon DocumentDB'})
print("INSERTED DATA")

##Find the document that was previously written
x = col.find_one({'hello':'Amazon DocumentDB'})

##Print the result to the screen
print("RETRIEVED DATA",x)

##Close the connection
client.close()

我尝试将 pymongo 的版本更改为 thread建议但是它没有帮助。

最佳答案

  1. 确保您的 Lambda 函数不在公共(public)子网中,否则将无法运行。因此,这意味着您需要返回 Lambda 控制台并从 VPC 可编辑部分中删除公有子网。

  2. 确保您有一个专门用于您的 Lambda 函数的安全组,如下所示:

Lambda 安全组出站规则:

Type            Protocol      Port Range       Destination
All Traffic All All 0.0.0.0/0

如果您愿意,您也可以将此限制为端口 80/443 上的 HTTP/HTTPS。

2.检查您的 DocumentDB 集群的安全组,看它是否设置了入站规则,如下所示:

Type            Protocol      Port Range       Source
Custom TCP TCP 27017 Lambda Security Group
  1. 您的 Lambda 函数需要具有正确的权限,它们是:
    1. 托管策略 AWSLambdaBasicExecutionRole
    2. 托管策略 AWSLambdaVPCAccessExecutionRole

完成此操作后,您的 VPC 部分应如下所示:1.VPC——默认VPC2. 子网 - 选择 2 个子网(均为私有(private))3. Lambda 函数的安全组。不是默认安全组

这应该会为您完成。如果它不起作用,请告诉我,我会尽力帮助您解决问题。

关于python - 使用 Python 从 AWS Lambda 连接到 DocumentDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65222660/

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