AWS SAM无服务器应用连接现有MongoDB的操作流程咨询
AWS SAM Python 函数连接已部署MongoDB 操作流程
前置准备
- 在SAM项目的Lambda函数代码目录下的
requirements.txt中添加MongoDB Python驱动依赖:pymongo==4.6.1 # 如果使用MongoDB Atlas,替换为 pymongo[srv]==4.6.1
步骤1:配置MongoDB凭证存储
不要将连接字符串、账号密码硬编码到代码中,通过AWS Secrets Manager托管敏感信息:
- 打开AWS控制台进入Secrets Manager服务,新建密钥,选择「其他类型的密钥」
- 按键值对形式添加配置:
MONGODB_URI对应MongoDB连接字符串、MONGODB_DB_NAME对应要访问的数据库名 - 保存后记下该密钥的ARN值
步骤2:修改SAM模板配置
编辑项目根目录的template.yaml,给Lambda函数添加对应的权限和环境变量:
- 配置Secrets Manager访问权限,在对应函数的
Properties块下新增权限配置:Policies: - Version: '2012-10-17' Statement: - Effect: Allow Action: secretsmanager:GetSecretValue Resource: "你之前创建的Secrets Manager密钥ARN" - 配置环境变量传递密钥ARN:
Environment: Variables: MONGODB_SECRET_ARN: "你之前创建的Secrets Manager密钥ARN" - 特殊情况适配:如果你的MongoDB部署在VPC内部,需要额外给函数添加VPC配置,指定和MongoDB相同的VPC、子网、安全组,同时安全组要开放Lambda访问MongoDB默认27017端口的权限。
步骤3:编写MongoDB连接代码
将连接初始化放在Lambda处理函数外部,利用执行环境复用机制减少重复建连的开销,示例代码如下:
import os import json import boto3 from pymongo import MongoClient from botocore.exceptions import ClientError # 全局初始化Secrets Manager客户端 secrets_client = boto3.client('secretsmanager') # 全局存储MongoDB连接,实现复用 mongo_client = None db = None def get_mongo_creds(): secret_arn = os.environ.get('MONGODB_SECRET_ARN') try: resp = secrets_client.get_secret_value(SecretId=secret_arn) return json.loads(resp['SecretString']) except ClientError as e: raise e # 连接初始化放在函数外部,仅冷启动时执行一次 if not mongo_client: creds = get_mongo_creds() mongo_client = MongoClient(creds['MONGODB_URI']) db = mongo_client[creds['MONGODB_DB_NAME']] def lambda_handler(event, context): # 业务逻辑示例:查询集合数据 user_collection = db['users'] users = list(user_collection.find({}, {'_id': 0})) return { "statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": json.dumps(users) }
步骤4:测试部署
- 执行
sam build构建项目 - 执行
sam local invoke 你的函数逻辑ID本地验证连接是否正常 - 测试无误后执行
sam deploy部署到AWS环境即可
注意事项
- 超时配置:Lambda默认超时为3秒,首次冷启动建连耗时较长,建议将函数超时调整到10秒以上
- 连接池配置:根据Lambda并发量调整MongoDB连接池大小,避免超出数据库的最大连接数限制
- 访问控制:如果MongoDB为公网部署,需要将Lambda的出站IP添加到MongoDB的访问白名单中
内容的提问来源于stack exchange,提问作者Nikhil k gireesh
相关产品推荐
相关产品推荐

