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

如何在同VPC内实现AWS Lambda无NAT网关直连DocumentDB

同一VPC内AWS Lambda无NAT网关连接Amazon DocumentDB的低成本开发方案

问题

直接连接DocumentDB(如通过SSH或同一VPC内)时,即便连接已建立,客户端仍可能无法读取数据。原因是DocumentDB会引导Mongo客户端连接至特定DNS名称,导致连接逻辑异常。

解决方案

  • 将Lambda与DocumentDB部署在同一VPC:确保两者处于同一虚拟私有云网络内,保障基础网络可达性。
  • 使用直连参数:在MongoDB URI连接串中添加directConnection=true参数,强制MongoDB驱动直连指定主机,绕过副本集默认的DNS解析流程。
    mongodb://username:password@hostname:27017/database?directConnection=true
    

可选配置:为其他AWS API配置VPC端点

若Lambda函数需访问其他AWS服务API,可配置对应VPC端点,无需NAT网关即可实现与这些服务的通信。

额外说明

  • 数据包捕获:可使用tcpdump等工具捕获数据包,观察连接行为细节。
  • 生产环境限制:该方案仅适用于开发场景,不符合AWS官方标准指导,不建议在生产环境使用。
  • 安全注意事项:需严格遵循安全最佳实践,包括合理配置VPC、IAM角色及安全组。

Python示例代码

import pymongo

DOCUMENTDB_ENDPOINT = 'docdb-a.cluster-hidden.eu-central-1.docdb.amazonaws.com'
DOCUMENTDB_PORT = 27017
DOCUMENTDB_USERNAME = 'master'
DOCUMENTDB_PASSWORD = 'paasWORD123!!'
DB_NAME = 'docdb'
COLLECTION_NAME = 'collection_a'

url = f"mongodb://{DOCUMENTDB_USERNAME}:{DOCUMENTDB_PASSWORD}@{DOCUMENTDB_ENDPOINT}:{DOCUMENTDB_PORT}/?ssl=true&tlsAllowInvalidHostnames=true&tlsCAFile=ca-bundle.pem&directConnection=true&retryWrites=false"
client = pymongo.MongoClient(url)

db = client[DB_NAME]
collection = db[COLLECTION_NAME]

# 执行读取操作
collection.find_one({})

client.close()

内容的提问来源于stack exchange,提问作者Aliaksei Smirnou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:49:58