如何将AWS Batch(Fargate)任务连接至MongoDB
从零配置AWS Batch(Fargate)通过PrivateLink连接MongoDB
一、VPC及网络基础配置
- 创建VPC:指定私有CIDR段(例如
10.0.0.0/16) - 划分两类子网(覆盖至少2个可用区,保证高可用):
- 公有子网:CIDR如
10.0.0.0/24、10.0.1.0/24,启用「自动分配公有IP」,关联互联网网关(IGW)到VPC - 私有子网:CIDR如
10.0.2.0/24、10.0.3.0/24,禁用自动分配公有IP
- 公有子网:CIDR如
- 部署NAT网关:放置在公有子网,分配弹性IP;给私有子网配置路由表,将0.0.0.0/0指向NAT网关(用于容器镜像拉取、AWS API调用)
- 创建安全组:
- Batch任务安全组:允许出站TCP 27017(MongoDB端口)、TCP 443/80(镜像拉取、AWS服务访问);入站规则按需配置(通常无需开放)
- MongoDB PrivateLink端点安全组:允许入站来自Batch任务安全组的TCP 27017;出站规则按需配置
二、MongoDB PrivateLink配置
针对MongoDB Atlas
- 登录Atlas控制台,进入目标集群的「Network Access」页面
- 点击「Add IP Access List」,选择「Add AWS Private Endpoint」
- 填写AWS账户ID、区域,选择目标VPC ID,关联之前创建的私有子网和MongoDB端点安全组
- 等待端点创建完成,记录生成的私有DNS名称(格式如
vpce-xxxxxx.mongodb.net) - 将Atlas集群的连接字符串替换为该私有DNS地址,禁用公网连接
针对AWS自建MongoDB(EC2部署)
- 在AWS VPC控制台创建「Interface Endpoint」,服务类型选「自定义」,指定MongoDB实例的私有IP和端口27017
- 关联目标VPC、私有子网和MongoDB端点安全组
- 配置MongoDB实例的安全组,允许来自Batch任务安全组的27017端口访问
三、AWS Batch(Fargate)完整配置
1. 创建IAM角色
- Batch服务角色:信任策略允许
batch.amazonaws.com,附加AWSBatchServiceRole托管策略 - Batch任务执行角色:信任策略允许
ecs-tasks.amazonaws.com,附加AmazonECSTaskExecutionRolePolicy(用于镜像拉取、日志上传);若拉取ECR私有镜像,额外添加AmazonEC2ContainerRegistryReadOnly权限
2. 创建Compute Environment(Fargate)
- 类型选择「Fargate」,配置名称
- 选择目标VPC和对应私有子网(必须与PrivateLink同VPC)
- 关联Batch任务安全组
- IAM角色选择已创建的Batch服务角色
3. 创建Job Queue
- 配置名称和优先级,关联上述Fargate Compute Environment
4. 创建Job Definition
- 类型选择「Fargate」,配置名称
- 任务角色选择Batch任务执行角色
- 容器配置:
- 镜像地址:填写业务镜像或公共镜像(如
mongo:latest) - 环境变量:添加
MONGO_URI,值为MongoDB私有连接字符串(例如mongodb+srv://user:pass@vpce-xxxxxx.mongodb.net/dbname) - 资源配置:根据需求设置vCPU和内存(Fargate最小配置为0.25vCPU/0.5GB)
- 网络配置:选择「awsvpc」模式,指定目标VPC、私有子网和Batch任务安全组
- 镜像地址:填写业务镜像或公共镜像(如
四、常见错误排查
1. CannotPullContainerError
- 检查私有子网路由表是否指向NAT网关,确保能访问公网(拉取公共镜像需此配置)
- 若使用ECR私有镜像:确认任务执行角色拥有
AmazonEC2ContainerRegistryReadOnly权限,或配置了ECR PrivateLink端点 - 验证Batch任务安全组是否允许出站TCP 443(ECR/Docker Hub的HTTPS端口)
2. ServerSelectionTimeOut(未在白名单)
- 确认MongoDB网络白名单已添加Batch任务所在私有子网的CIDR,或PrivateLink端点安全组允许Batch任务安全组的27017端口访问
- 检查连接字符串是否使用PrivateLink私有DNS,而非公网地址
- 在Batch任务中添加测试命令(如
nc -zv vpce-xxxxxx.mongodb.net 27017),验证端口连通性
内容的提问来源于stack exchange,提问作者Pondering Thought2109
相关产品推荐
相关产品推荐

