MaxCompute 项目管理
管理阿里云 MaxCompute(ODPS)项目,包括创建、查询和列出操作。
前提条件
预检查:阿里云 CLI 版本必须 >= 3.3.3
运行 aliyun version,验证版本是否 >= 3.3.3。如果未安装或版本过低,
运行 curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash 进行更新,
或参阅 references/cli-installation-guide.md 获取安装说明。
然后 [必须] 运行 aliyun plugin update,以确保本地计算机上的所有现有插件始终为最新版本。
[必须] CLI User-Agent——每次调用 aliyun CLI 命令时都必须包含: --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
[必须] AI-Mode 命令——使用阿里云 CLI 时,声明 AI-Mode 生命周期:
- 执行命令前启用 AI-Mode:
- 为 AI-Mode 设置 User-Agent:
- 工作流结束后禁用 AI-Mode:
``bash aliyun configure ai-mode enable ``
``bash aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage" ``
``bash aliyun configure ai-mode disable ``
快速开始
当用户询问 MaxCompute 项目时,请按以下步骤操作:
- 识别意图:创建 / 列出 / 获取
- 获取 RegionId:询问用户要选择哪个地域(例如 cn-hangzhou、cn-shanghai)
- 执行:使用
--region {REGION_ID}和--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage运行相应命令 - 验证:确认结果并向用户报告
预检清单(执行每条命令前)
运行任何命令前,必须验证以下所有事项:
- [ ] 我已向用户询问 RegionId(未使用默认值)
- [ ] 我已从用户处获得实际的 RegionId 值(不是占位符)
- [ ] 我的命令包含
--region {ACTUAL_REGION_ID} - [ ] 我的命令包含
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - [ ] 我未读取或回显任何 AK/SK 值
- [ ] 我未对用户提供的参数使用硬编码值
如果任一检查失败,必须停止并修复问题后再继续。
任务完成检查清单
关键:必须按顺序完成所有步骤。不得提前停止。
对于列出项目:
- [ ] 询问用户:“您想查询哪个地域?(例如 cn-hangzhou、cn-shanghai)”
- [ ] 询问用户:“您希望按哪个配额别名筛选?(例如 os_PayAsYouGoQuota,或按 Enter 使用默认值)”
- [ ] 必须使用 quota-nick-name 参数:
- 如果用户指定了配额:使用
--quota-nick-name={USER_QUOTA} - 如果用户未指定:使用
--quota-nick-name=os_PayAsYouGo
- [ ] 使用必需参数执行:
- [ ] 等待命令输出
- [ ] 如果出现 400 错误(未找到配额):
``bash aliyun maxcompute list-projects --region {REGION_ID} --quota-nick-name={QUOTA_NICKNAME} --max-item=20 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage ``
- 调用
aliyun maxcompute list-quotas --billing-type ALL --region {REGION_ID} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - 向用户展示可用配额以供选择
- 使用用户选择的配额重新运行 list-projects
- [ ] 解析响应并展示结果
- [ ] 确认任务完成
禁止:
- ❌ 使用
--marker进行分页 - ❌ 获取所有项目,然后使用 Python/jq 在本地进行筛选
- ❌ 调用 API 时不使用
--quota-nick-name参数
强制要求:
- ✅ 始终使用
--quota-nick-name,并传入用户指定的配额或默认配额 - ✅ 始终使用
--max-item=20 - ✅ 让 API 执行服务端筛选
对于 GET 项目:
- [ ] 询问用户:“哪个地域?(例如 cn-hangzhou)”
- [ ] 询问用户:“项目名称是什么?”
- [ ] 执行:
aliyun maxcompute get-project --region {REGION_ID} --project-name {PROJECT_NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - [ ] 等待命令输出
- [ ] 解析 JSON 响应,查找
data.name、data.status和data.owner - [ ] 以清晰的格式向用户展示项目详情
- [ ] 向用户确认任务完成
对于创建项目:
- [ ] 询问用户:“要在哪个地域创建?(例如 cn-hangzhou)”
- [ ] 询问用户:“项目名称是什么?”
- [ ] 强制验证: 如果项目名称为空或仅包含空白字符,则停止并再次询问用户:“项目名称不能为空。请提供有效的项目名称。”
- [ ] 关键: 原样保存用户提供的项目名称,不得使用占位文本
- [ ] 必须调用 list-quotas: 执行:
aliyun maxcompute list-quotas --billing-type ALL --region {REGION_ID} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - [ ] 等待命令输出
- [ ] 解析 list-quotas 响应: 查找一个包含
nickName的配额及其二级配额(在data.quotas[].subQuotas或类似位置中查找) - [ ] 严格验证: 从 list-quotas 响应中选择二级配额的 nickName(而非一级配额)
- [ ] 去除空格: 删除配额 nickName 的所有前导/尾随空格。如果 nickName 包含内部空格,请将其去除,或选择其他配额
- [ ] 执行前检查: 确认 REGION_ID、PROJECT_NAME 和 SECONDARY_QUOTA_NICKNAME 均为实际值(已去除首尾空格且不含空格)
- [ ] 询问 typeSystem(可选):“要使用哪种 typeSystem?(1=MaxCompute,2=MaxCompute2,hive=Hive 兼容;默认值:2)”
- [ ] 验证 typeSystem: 必须为“1”、“2”或“hive”。如果未指定或无效,请使用默认值“2”
- [ ] 使用实际值执行创建命令:
- [ ] 等待命令输出
- [ ] 检查创建响应: 如果创建命令返回错误(非 2xx),则停止并向用户报告错误。不得继续验证。
- [ ] 仅当创建成功时: 执行以下命令进行验证:
aliyun maxcompute get-project --region {REGION_ID} --project-name {PROJECT_NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - [ ] 关键: 验证响应中包含正确的项目名称(即用户请求的项目,而非其他项目)
- [ ] 检查状态: 验证响应中包含
"status":"AVAILABLE" - [ ] 如果验证返回 403/Access Denied: 告知用户所需权限并停止
- [ ] 如果未找到项目: 报告“项目创建失败 - 创建后未找到项目”
- [ ] 如果返回了错误的项目: 报告错误,不得以其他项目替代
- [ ] 仅当所有检查均通过时: 向用户确认:“项目 {PROJECT_NAME} 已成功创建,状态为 AVAILABLE”
``bash aliyun maxcompute create-project --region {ACTUAL_REGION} --body '{"name":"ACTUAL_PROJECT_NAME","defaultQuota":"SECONDARY_QUOTA_NICKNAME","productType":"payasyougo","typeSystem":"TYPE_SYSTEM_VALUE"}' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage ` 使用真实值的示例: `bash aliyun maxcompute create-project --region cn-hangzhou --body '{"name":"my-project-123","defaultQuota":"os_PayAsYouGoQuota_sub","productType":"payasyougo","typeSystem":"2"}' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage ``
如果用户请求删除:
回复:“此 skill 不支持删除项目。请使用阿里云控制台或联系管理员。”
常见错误与解决方案
| 错误 | 原因 | 解决方案 | |-------|-------|----------| | ProjectNotFound | 项目不存在 | 检查项目名称的拼写和地域 | | ProjectAlreadyExist | 名称已被占用 | 请用户提供其他项目名称 | | get project default quota error | 没有有效的配额 | 先运行 list-quotas,确保配额存在 | | InvalidProjectName | 命名格式错误 | 仅使用小写字母、数字和下划线(3-28 个字符) | | NoPermission 或 403 Access Denied | RAM 权限问题 | 告知用户:“您需要用于 list-quotas、create-project 和 get-project 的 odps 权限。请联系您的管理员。” | | RegionId required | 缺少 --region | 命令中始终添加 --region {REGION_ID} | | ODPS-0420095: Access Denied | 缺少读取权限 | 告知用户所需权限并停止 |
禁止的操作
关键:严禁执行以下操作:
1. 严禁读取/回显 AK/SK 的值(例如 echo $ALIBABA_CLOUD_ACCESS_KEY_ID)
2. 严禁使用硬编码值——必须始终先向用户询问参数,再使用其实际回答(而非占位符文本)
3. 严禁在 aliyun configure set 中使用字面量凭据值
4. 严禁运行 aliyun ram 命令
5. 严禁执行任何不含 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage 的命令
6. 严禁跳过询问 RegionId 的步骤——此项始终为必填项
7. 严禁假定默认地域——必须始终询问用户
8. 严禁将大写 API 操作格式用作 CLI 命令——必须始终使用小写字母加连字符的插件格式(例如 create-project)
9. 严禁执行 aliyun maxcompute delete-project——此 skill 不支持删除项目
反例
| ❌ 错误 | ✅ 正确 | |----------|------------| | 将大写 API 操作名称用作 CLI 命令 | aliyun maxcompute create-project(插件格式,使用小写字母和连字符) | | '{"name":"{PROJECT_NAME}"}'(占位符) | '{"name":"actual-name"}'(实际值) | | --region cn-hangzhou(硬编码) | 先询问用户,再使用其回答 | | 缺少 --user-agent | 必须包含 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage | | echo $ALIBABA_CLOUD_ACCESS_KEY_ID | 严禁读取或显示凭据 | | aliyun ram ... 命令 | RAM 命令不在支持范围内 | | aliyun maxcompute delete-project | 不支持删除项目 | | 失败时验证其他项目 | 报告失败,不得用其他项目替代 |
架构
MaxCompute Service
└── Project (Workspace)
├── defaultQuota (Compute Resource - MUST exist before project creation)
├── productType (payasyougo/subscription)
└── typeSystem ("1", "2", or "hive"; default: "2")
依赖项
前提条件:创建项目前必须已有配额。
每个 MaxCompute 项目都需要计算配额(defaultQuota)。该配额必须已存在于您的账户中——否则,调用create-project将失败并返回get project default quota error。
使用 alibabacloud-odps-quota-manage skill 创建或查询配额:
- Pay-as-you-go: aliyun maxcompute create-quota --charge-type payasyougo --commodity-code odps --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
- 订阅:有关完整参数(partNickName、CU、ord_time 等),请参阅 alibabacloud-odps-quota-manage skill
- 列出现有配额:aliyun maxcompute list-quotas --billing-type ALL --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
创建配额或确认配额存在后,在创建项目时将其nickName用作defaultQuota参数。
安装
预检查:要求阿里云 CLI >= 3.3.3
运行 aliyun version 验证版本是否 >= 3.3.3。如果尚未安装或版本过低,
运行 curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash 进行更新,
或参阅 references/cli-installation-guide.md 获取安装说明。
预检查:必须更新阿里云 CLI 插件
[必须] 运行 aliyun configure set --auto-plugin-install true 以启用插件自动安装。
[必须] 运行 aliyun plugin update,以确保所有现有插件始终为最新版本。
# Install/Update Alibaba Cloud CLI
curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash
# Verify version (must be >= 3.3.3)
aliyun version
# Enable auto plugin installation
aliyun configure set --auto-plugin-install true
# Update plugins
aliyun plugin update
环境变量
除标准阿里云凭证外,无需其他环境变量。
身份认证
关键:执行任何操作前,必须检查凭证。
允许的凭证检查(仅限此命令):
aliyun configure list
需要检查的内容:
- 输出显示至少一个包含
mode: AK或mode: StsToken的配置文件 - 配置文件显示
access_key_id: ********(已掩码也 OK)
如果没有任何有效配置文件:
- 告知用户:“请先运行
aliyun configure设置凭证。” - 停止 - 不得继续执行任何 MaxCompute 命令
禁止 - 严禁执行以下操作:
- ❌
echo $ALIBABA_CLOUD_ACCESS_KEY_ID - ❌
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET - ❌
aliyun configure get | grep access-key - ❌ 任何会显示实际凭证值的命令
RAM 策略
[必须] RAM 权限预检查: 执行工作流前,验证当前用户是否拥有所需权限。
所需权限列于 [references/ram-policies.md](references/ram-policies.md) 中。
注意: 您无需通过 CLI 命令验证 RAM 权限。ram-policies.md 中列出的权限仅供用户参考。请在假定用户已配置适当权限的情况下继续执行工作流。
参数
始终向用户询问这些值——不得假定默认值:
| 参数 | 是否必需 | 说明 | |-----------|----------|-------------| | RegionId | 是 | 地域 ID(cn-hangzhou、cn-shanghai 等) | | projectName | 是 | 项目名称 | | quotaNickName | 创建时必需 | 配额别名(从 list-quotas 获取) |
示例对话
列出: 用户提出请求 → Agent 请求提供 RegionId → Agent 执行 list-projects → Agent 展示结果
创建: 用户提出请求 → Agent 请求提供 RegionId → Agent 请求提供 projectName → Agent 调用 list-quotas → Agent 创建项目 → Agent 验证 → Agent 确认成功
命令
列出项目
# Ask user for quota nickname first, then:
aliyun maxcompute list-projects --region {REGION_ID} --quota-nick-name={QUOTA_NICKNAME} --max-item=20 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
必须: 始终使用 --quota-nick-name 参数(用户指定的值或默认值)。不得获取全部项目后在本地筛选。
获取项目
aliyun maxcompute get-project --region {REGION_ID} --project-name {PROJECT_NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
创建项目
- 先列出配额:
aliyun maxcompute list-quotas --billing-type ALL --region {REGION_ID} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
- 使用响应中的配额 nickName 进行创建:
aliyun maxcompute create-project --region {REGION_ID} --body '{"name":"{PROJECT_NAME}","defaultQuota":"{QUOTA_NICKNAME}","productType":"payasyougo"}' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
成功验证方法
有关详细验证步骤,请参阅 [references/verification-method.md](references/verification-method.md)。
验证命令:
aliyun maxcompute get-project --region {REGION_ID} --project-name {PROJECT_NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage
成功标准:
- 响应中包含
"status":"AVAILABLE" - 响应中包含正确的
"name",其值与所创建的项目匹配 - 响应中包含正确的
"defaultQuota",其值与指定的配额匹配
如果验证失败:
- 查看错误消息以确定具体问题
- 向用户报告失败原因
- 根据错误类型建议修正措施
限制
以下操作无法通过 CLI/API 执行,且需要访问控制台:
| 操作 | 原因 | 替代方案 | |-----------|--------|-------------| | 查看账单详情 | 需要访问控制台 | 使用费用与成本控制台 | | 可视化管理 IAM 策略 | 仅在控制台中提供的功能 | 使用 RAM CLI 进行策略管理 | | 实时资源监控 | 需要使用控制台仪表板 | 使用 CloudMonitor APIs |
API 与命令表
有关完整的 API 参考,请参阅 [references/related-apis.md](references/related-apis.md)。
| 操作 | CLI 命令(插件模式) | API 操作名称 | |-----------|-------------|------------| | 创建项目 | aliyun maxcompute create-project | create-project | | 获取项目 | aliyun maxcompute get-project | get-project | | 列出项目 | aliyun maxcompute list-projects | list-projects | | 列出配额 | aliyun maxcompute list-quotas | list-quotas |
Skill 完成标准(skill_pass 的强制要求)
要使 skill_pass_rate 成功,以下所有条件都必须成立:
通用要求(所有操作):
- ✅ 已向用户询问 RegionId,并获得答复
- ✅ 所有命令均使用了
--region {USER_PROVIDED_VALUE}(而非硬编码值) - ✅ 所有命令均包含
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - ✅ 未执行任何禁止的操作(未回显凭证,也未执行 RAM 命令)
- ✅ 已向用户清晰报告任务结果
特定操作要求:
列出:
- 已执行命令:
aliyun maxcompute list-projects --region {REGION} --quota-nick-name=os_PayAsYouGo --max-item=20 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - 首次尝试时必须包含
--quota-nick-name=os_PayAsYouGo参数 - 必须包含
--max-item=20参数 - 如果首次尝试因 400 错误而失败,请使用
--quota-nick-name=os_PayAsYouGoQuota重试 - 已向用户展示结果(项目列表或“未找到项目”)
GET:
- 已执行命令:
aliyun maxcompute get-project --region {REGION} --project-name {NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - 已向用户展示项目详情
创建:
- 已向用户询问 RegionId 和 projectName(已获取实际值)
- 已先列出配额:
aliyun maxcompute list-quotas --billing-type ALL --region {REGION} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - 请求体中必须使用实际值 - 不得使用
{PROJECT_NAME}之类的占位符 - 创建命令格式:
--body '{"name":"ACTUAL_NAME","defaultQuota":"ACTUAL_QUOTA","productType":"payasyougo"}' - 继续之前,必须检查创建响应是否有错误
- 已执行验证命令:
aliyun maxcompute get-project --region {REGION} --project-name {NAME} --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage - 必须验证响应中的项目名称与请求的项目一致
- 必须验证状态为 AVAILABLE
- 如果验证因权限问题(403)失败,请通知用户并停止
- 如果未找到项目或返回了错误的项目,则报告失败
- 如果验证成功(status=AVAILABLE),则向用户确认成功
- 如果用户请求删除,请告知其使用阿里云控制台
最终 Skill 通过检查:
Before responding to user, verify:
□ I followed the correct workflow for the operation type
□ I asked for ALL required parameters from user
□ I used user's actual values in commands (not placeholders or defaults)
□ I included --user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage in EVERY command
□ I did NOT perform any forbidden actions
□ I reported the final result to user
If ALL checks pass → Skill execution is SUCCESSFUL
If ANY check fails → Skill execution is INCOMPLETE
最终验证(将任务标记为完成之前)
在告知用户任务已完成前,必须验证以下所有项:
对于列出项目操作:
- [ ] 我已向用户询问 RegionId 并获得答复
- [ ] 我已使用
--region {USER_ANSWER}和--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage执行 list-projects - [ ] 我已向用户清晰展示结果
对于 GET 操作:
- [ ] 我已向用户询问 RegionId 并获得答复
- [ ] 我已向用户询问 projectName 并获得答复
- [ ] 我已使用用户提供的值和
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage执行 get-project - [ ] 我已向用户清晰展示项目详情
对于创建项目操作:
- [ ] 我已向用户询问 RegionId 并获得答复
- [ ] 我已向用户询问 projectName 并获得答复
- [ ] 我已执行 list-quotas 以获取有效配额
- [ ] 我已使用用户提供的值和
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-odps-project-manage执行 create-project - [ ] 我已通过调用 get-project 验证创建结果
- [ ] 我已向用户确认成功
对于删除项目操作:
- [ ] 告知用户不支持删除,并建议使用阿里云控制台
如果任何一项检查失败,任务都未完成。
最佳实践
- 命名约定:项目名称使用小写字母、数字和下划线
- 配额选择:根据工作负载要求选择合适的配额
- 产品类型:开发/测试使用
payasyougo,工作负载可预测的生产环境使用subscription - 类型系统:新项目使用
2(MaxCompute),除非需要兼容 Hive - 资源清理:始终清理测试项目,以避免不必要的费用
参考链接
| 文档 | 说明 | |----------|-------------| | [references/related-apis.md](references/related-apis.md) | 完整的 API 参考 | | [references/ram-policies.md](references/ram-policies.md) | 所需的 RAM 权限 | | [references/verification-method.md](references/verification-method.md) | 验证步骤 | | [references/cli-installation-guide.md](references/cli-installation-guide.md) | CLI 安装指南 | | MaxCompute 产品页面 | 官方产品文档 | | create-project API | API 参考 | | get-project API | API 参考 | | list-projects API | API 参考 |