You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:27:01