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

如何将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
  • 部署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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:50:41