python-3.x - 无法通过 lambda 函数连接到 mongodb 集群
问题描述
我有一个在 AWS 上运行的 mongoDB 集群,并且 MONGO_URI 的格式为:
mongodb://<user>:<password>@host1.example.com:27017,host2.example.com:27017/?ssl=true&ssl_ca_certs=<path/to/ca.pem>&replicaSet=<replicaSetName>
由于我有 的依赖项ca.pem
,因此我创建了一个lambda 层,因此能够在/opt/mongo_certs/ca.pem
. (mongo_certs 是我上传的 zip 文件的名称)。
lambda的代码如下
import datetime
import os
from pymongo import MongoClient
# get the creds from env variables
MONGO_USER = os.environ['MONGO_USER']
MONGO_USER_PASSWORD = os.environ['MONGO_PASSWORD']
MONGO_CERT_PATH = os.environ['MONGO_CERT_PATH']
MONGO_HOSTS = os.environ['MONGO_HOSTS']
MONGO_REPLICA_SET_NAME = os.environ['MONGO_REPLICA_SET_NAME']
MONGO_URI = f'mongodb://{MONGO_USER}:{MONGO_USER_PASSWORD}@{MONGO_HOSTS}/?ssl=true&ssl_ca_certs={MONGO_CERT_PATH}&replicaSet={MONGO_REPLICA_SET_NAME}'
# create a mongoDB connection
MONGO_CLIENT = MongoClient(MONGO_URI)
TEST_COLLECTION_CONN = MONGO_CLIENT['someDB']['someCollection']
def write_to_mongoDB(event, context):
try:
data = {
'createdDate': datetime.datetime.utcnow(),
'message': 'written from aws lambda'
}
response = TEST_COLLECTION_CONN.insert_one(data)
print('response =====>', response)
return True
except Exception as err:
print(err)
return False
测试运行该功能时出现以下错误:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1108)
所以我有几个问题:
- 这是通过自签名证书访问 MongoDB 的推荐方式吗(安全方面)
- 为什么会发生上述错误,因为我可以从我的 EC2 访问集群。
注意:我的 lambda 函数与我的 EC2 在同一个 VPC 和安全组中运行。
谢谢。
解决方案
推荐阅读
- amazon-web-services - AWS LoadBalancer 监听多个端口
- php - 保存 woocommerce 产品后,什么是 wordpress/woocommerce 钩子?
- javascript - 返回选中和未选中的复选框值
- ios - 在 iPhone X(及更高版本)上启动与键盘大小相同的 UIDatePicker
- c - LTO 模式下用于 ARM 的 GCC 8 正在删除中断处理程序和弱功能 - 如何防止它?
- react-native - ScrollView 在没有 flex 时越过父元素,但不能用 flex 看到
- php - 仅来自 php 服务的 pgsql 服务的 Docker SQLSTATE[08006]
- elasticsearch - elasticsearch赋予不同领域和场景更多的权重
- c# - 什么是更好的做法:存储字符串或使用关系?
- arrays - 在 mongodb 中存储和更新时间序列数据的最佳实践