名称: 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"}}}
通过 Atlas Administration API v2 以编程方式管理 MongoDB Atlas 基础设施。
Atlas API 支持使用 API 密钥的 HTTP Digest 认证或使用服务账号的 OAuth2 认证。
# 设置凭证
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/..."
# 获取访问令牌
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}"
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
}
}]
}]
}'
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}"
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"
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"
}]'
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
https://cloud.mongodb.com/api/atlas/v2application/vnd.atlas.2025-03-12+json详细端点文档请参阅 references/api-endpoints.md。
Michael Lynn — MongoDB 首席开发者布道师
欢迎在 GitHub 上提交问题与贡献!