OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  mongodb-atlas-admin:管理 MongoDB Atlas 集群、项目与用户权限

mongodb-atlas-admin:管理 MongoDB Atlas 集群、项目与用户权限

 
  loadbalancer ·  2026-02-07 06:16:31 · 3 次点击  · 0 条评论  

名称: mongodb-atlas-admin
描述: "通过 Atlas Admin API v2 管理 MongoDB Atlas 集群、项目、用户、备份和告警。适用于以下场景:(1) 创建、扩缩容或删除 Atlas 集群,(2) 管理数据库用户和 IP 访问列表,(3) 配置备份、快照和恢复任务,(4) 设置告警和监控,(5) 管理项目和组织,(6) 查看集群指标和日志。需要 Atlas API 密钥(公钥/私钥)或服务账号凭证。"
元数据: {"clawdbot":{"emoji":"🍃","requires":{"bins":["curl","jq"]},"author":{"name":"Michael Lynn","github":"mrlynn","website":"https://mlynn.org","linkedin":"https://linkedin.com/in/mlynn"}}}


MongoDB Atlas 管理

通过 Atlas Administration API v2 以编程方式管理 MongoDB Atlas 基础设施。

身份验证

Atlas API 支持使用 API 密钥的 HTTP Digest 认证或使用服务账号的 OAuth2 认证。

API 密钥(传统但更简单)

# 设置凭证
export ATLAS_PUBLIC_KEY="your-public-key"
export ATLAS_PRIVATE_KEY="your-private-key"

# 所有请求使用摘要认证
curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" \
  --digest \
  --header "Accept: application/vnd.atlas.2025-03-12+json" \
  --header "Content-Type: application/json" \
  "https://cloud.mongodb.com/api/atlas/v2/..."

服务账号(OAuth2 - 推荐)

# 获取访问令牌
TOKEN=$(curl -s --request POST \
  "https://cloud.mongodb.com/api/oauth/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}" \
  | jq -r '.access_token')

# 使用令牌(有效期为 1 小时)
curl --header "Authorization: Bearer ${TOKEN}" \
  --header "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/..."

快速参考

任务 端点 方法
列出项目 /groups GET
创建项目 /groups POST
列出集群 /groups/{groupId}/clusters GET
创建集群 /groups/{groupId}/clusters POST
获取集群 /groups/{groupId}/clusters/{clusterName} GET
更新集群 /groups/{groupId}/clusters/{clusterName} PATCH
删除集群 /groups/{groupId}/clusters/{clusterName} DELETE
列出数据库用户 /groups/{groupId}/databaseUsers GET
创建数据库用户 /groups/{groupId}/databaseUsers POST
列出 IP 访问列表 /groups/{groupId}/accessList GET
添加 IP 访问 /groups/{groupId}/accessList POST

集群

列出项目中的所有集群

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters"

获取集群详情

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}"

创建集群(M10+)

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters" \
  -d '{
    "name": "my-cluster",
    "clusterType": "REPLICASET",
    "replicationSpecs": [{
      "regionConfigs": [{
        "providerName": "AWS",
        "regionName": "US_EAST_1",
        "priority": 7,
        "electableSpecs": {
          "instanceSize": "M10",
          "nodeCount": 3
        }
      }]
    }]
  }'

创建免费层集群(M0)

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters" \
  -d '{
    "name": "free-cluster",
    "clusterType": "REPLICASET",
    "replicationSpecs": [{
      "regionConfigs": [{
        "providerName": "TENANT",
        "backingProviderName": "AWS",
        "regionName": "US_EAST_1",
        "priority": 7,
        "electableSpecs": {
          "instanceSize": "M0",
          "nodeCount": 3
        }
      }]
    }]
  }'

扩缩容集群(更改实例规格)

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}" \
  -d '{
    "replicationSpecs": [{
      "regionConfigs": [{
        "providerName": "AWS",
        "regionName": "US_EAST_1",
        "priority": 7,
        "electableSpecs": {
          "instanceSize": "M20",
          "nodeCount": 3
        }
      }]
    }]
  }'

删除集群

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -X DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}"

暂停/恢复集群

# 暂停(仅限 M10+)
curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}" \
  -d '{"paused": true}'

# 恢复
curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}" \
  -d '{"paused": false}'

项目(组)

列出所有项目

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups"

创建项目

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups" \
  -d '{
    "name": "my-project",
    "orgId": "YOUR_ORG_ID"
  }'

删除项目

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -X DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}"

数据库用户

列出数据库用户

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/databaseUsers"

创建数据库用户

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/databaseUsers" \
  -d '{
    "databaseName": "admin",
    "username": "myuser",
    "password": "securePassword123!",
    "roles": [{
      "databaseName": "admin",
      "roleName": "readWriteAnyDatabase"
    }]
  }'

删除数据库用户

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -X DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/databaseUsers/admin/${USERNAME}"

IP 访问列表

列出 IP 访问条目

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/accessList"

添加 IP 地址

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/accessList" \
  -d '[{
    "ipAddress": "192.168.1.1",
    "comment": "办公室 IP"
  }]'

允许所有 IP(仅限开发环境!)

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/accessList" \
  -d '[{
    "cidrBlock": "0.0.0.0/0",
    "comment": "允许所有 - 仅限开发"
  }]'

备份与快照

列出快照

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}/backup/snapshots"

创建按需快照

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}/backup/snapshots" \
  -d '{
    "description": "部署前快照",
    "retentionInDays": 7
  }'

从快照恢复

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  -H "Content-Type: application/json" \
  -X POST "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/clusters/${CLUSTER_NAME}/backup/restoreJobs" \
  -d '{
    "snapshotId": "SNAPSHOT_ID",
    "deliveryType": "automated",
    "targetClusterName": "restored-cluster",
    "targetGroupId": "${GROUP_ID}"
  }'

告警

列出告警配置

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/alertConfigs"

获取活跃告警

curl --user "${ATLAS_PUBLIC_KEY}:${ATLAS_PRIVATE_KEY}" --digest \
  -H "Accept: application/vnd.atlas.2025-03-12+json" \
  "https://cloud.mongodb.com/api/atlas/v2/groups/${GROUP_ID}/alerts?status=OPEN"

实例规格

层级 vCPU 内存 存储 适用场景
M0 共享 共享 512 MB 免费层,开发/学习
M2 共享 共享 2 GB 小型开发项目
M5 共享 共享 5 GB 较大开发项目
M10 2 2 GB 10 GB 开发/预发布,低流量
M20 2 4 GB 20 GB 轻量生产
M30 2 8 GB 40 GB 生产环境
M40 4 16 GB 80 GB 高流量生产
M50 8 32 GB 160 GB 大型生产
M60+ 16+ 64+ GB 320+ GB 企业级

辅助脚本

为方便起见,可使用 scripts/atlas.sh 包装脚本:

# 用法
./scripts/atlas.sh <命令> [参数]

# 示例
./scripts/atlas.sh projects list
./scripts/atlas.sh clusters list <项目ID>
./scripts/atlas.sh clusters create <项目ID> <名称> <规格> <区域>
./scripts/atlas.sh clusters delete <项目ID> <名称>
./scripts/atlas.sh clusters pause <项目ID> <名称>
./scripts/atlas.sh users list <项目ID>
./scripts/atlas.sh users create <项目ID> <用户名> <密码>

环境变量

# 必需
export ATLAS_PUBLIC_KEY="..."
export ATLAS_PRIVATE_KEY="..."

# 可选(用于服务账号)
export ATLAS_CLIENT_ID="..."
export ATLAS_CLIENT_SECRET="..."

# 常用 ID
export ATLAS_ORG_ID="..."      # 组织 ID
export ATLAS_GROUP_ID="..."    # 项目/组 ID

API 参考

  • 基础 URL: https://cloud.mongodb.com/api/atlas/v2
  • Accept 请求头: application/vnd.atlas.2025-03-12+json
  • 完整文档: https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/
  • OpenAPI 规范: https://github.com/mongodb/atlas-sdk-go/blob/main/openapi/atlas-api.yaml

详细端点文档请参阅 references/api-endpoints.md


作者

Michael Lynn — MongoDB 首席开发者布道师

欢迎在 GitHub 上提交问题与贡献!

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor