首页 > 解决方案 > 无法通过 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)

所以我有几个问题:

  1. 这是通过自签名证书访问 MongoDB 的推荐方式吗(安全方面)
  2. 为什么会发生上述错误,因为我可以从我的 EC2 访问集群。

注意:我的 lambda 函数与我的 EC2 在同一个 VPC 和安全组中运行。

谢谢。

标签: python-3.xmongodbamazon-web-servicesaws-lambda

解决方案


推荐阅读