Team 配额用于限制指定 Team 的资源使用量,多个团队、业务或环境共用智能体沙箱(Agent Sandbox)时,可分别配置 Team 的 CPU、内存和存活实例数配额。
功能介绍
本文介绍如何通过阿里云 Go SDK 管理 Team 配额。调用时使用阿里云访问凭证,API 版本为 Sandbox/2026-08-20。E2B SDK 和 API Key 不用于 Team 配额管理操作。
配额模型与规划
|
层级 |
生效范围 |
配额内容 |
管理方式 |
|
账号级 |
阿里云账号的单个地域。 |
账号在该地域的整体资源额度。 |
根据对应配额项查看或申请调整。 |
|
Team 级 |
账号在该地域的指定 Team。 |
CPU 核数、内存 GB 数和存活实例数。 |
通过智能体沙箱 OpenAPI 或阿里云 SDK 管理。 |
所有 Team 的 CPU 配额总和不能超过账号级 CPU 额度,内存配额总和不能超过账号级内存额度。配置 Team 配额前,先确认目标地域的账号额度,账号级资源限制及调整方式参见使用限制。
需要隔离生产、测试或批处理任务时,可以分别创建 Team 并设置配额。例如,在线服务与批量评测使用不同 Team,避免评测任务占用在线服务所在 Team 的额度。Team 的划分应以业务隔离需求为准。
规划 CPU 和内存配额时,结合预计同时运行的 Sandbox 数量和各自规格估算,并预留业务增长所需的账号额度。存活实例数配额单独配置。调低或删除配额前,应核对已有配置、当前资源使用量和业务峰值。
适用范围
-
已开通目标地域的智能体沙箱服务,并确认该地域和账号可使用 Team 配额管理能力。
-
已创建目标 Team 并获取 Team ID。
-
调用身份具备所需接口的 RAM(Resource Access Management,访问控制)权限,授权方法及资源 ARN(Alibaba Cloud Resource Name,资源名称)参见授权 RAM 用户访问控制台。
-
已按阿里云 SDK & API 说明准备 Go SDK 和访问凭证。本文示例使用
github.com/alibabacloud-go/sandbox-20260820的 v1.2.0 版本。
API 与 RAM 权限
|
操作 |
API / Go SDK 方法 |
RAM Action |
|
设置或更新配额 |
|
|
|
查询指定 Team 的配额 |
|
|
|
查询账号的配额列表 |
|
|
|
删除指定 Team 的配额 |
|
|
API 名称和 RAM Action 分别按上表填写。ListQuota 使用账号内配额集合的授权范围,仅获授权管理单个 Team 的调用身份不一定具有查询账号配额列表的权限。
配额参数
以下字段用于 UpdateQuota 的请求体。Go SDK 使用 sandbox.Quota 模型,字段通过 tea.String、tea.Int32 等函数赋值。
|
API 字段 |
Go SDK 字段 |
类型 |
是否必填 |
说明 |
|
|
|
字符串 |
是 |
填写目标 Team ID,格式为 |
|
|
|
整数 |
是 |
CPU 核数配额,取值为非负整数。 |
|
|
|
整数 |
是 |
内存配额,单位 GB,取值为非负整数。 |
|
|
|
整数 |
否 |
存活实例数配额。不填表示不更新;-1 表示清除该项配额;0 表示禁止使用;大于 0 表示设置配额。 |
除配额列表外,查询和删除操作通过请求参数 tagValue 指定 Team。配额列表使用 maxResults 控制每页条数,使用响应中的 nextToken 获取下一页。
管理 Team 配额
环境变量说明
访问凭证按阿里云 SDK & API 说明配置,通过环境变量传入,不写入代码、镜像、模板或日志。本文示例读取以下环境变量:
|
环境变量 |
用途 |
取值来源或填写方式 |
|
|
调用 OpenAPI 的 AccessKey ID。 |
取自调用身份的访问凭证。 |
|
|
配套的 AccessKey Secret。 |
与 AccessKey ID 一并获取。 |
|
|
STS(Security Token Service,安全令牌服务)临时凭证的安全令牌。 |
仅使用 STS 临时凭证时设置,取自同一组凭证。 |
|
|
配额所在地域。 |
填写目标地域 ID,例如 |
|
|
OpenAPI 服务接入点。 |
填写 |
|
|
要管理配额的 Team。 |
从目标地域的 Team 列表获取 Team ID。 |
设置或更新配额
UpdateQuota 同时用于设置配额和更新已有配置。执行前,将示例中的 CPU、内存和存活实例数改为目标值;已有配额时,先查询当前配置再更新。
在已配置访问凭证的终端中设置参数,以下以北京地域为例:
export SANDBOX_REGION_ID="cn-beijing"
export SANDBOX_ENDPOINT="sandbox.cn-beijing.aliyuncs.com"
export SANDBOX_TEAM_ID="<TEAM-ID>"
将以下代码保存为 main.go。该示例将指定 Team 的配额设置为 32 核 CPU、64 GB 内存和 16 个存活实例:
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"strings"
openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils"
sandbox "github.com/alibabacloud-go/sandbox-20260820/client"
"github.com/alibabacloud-go/tea/tea"
)
func requireEnv(name string) string {
value := strings.TrimSpace(os.Getenv(name))
if value == "" {
log.Fatalf("请设置 %s", name)
}
return value
}
func printJSON(value interface{}) {
data, err := json.MarshalIndent(value, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
}
func main() {
client, err := sandbox.NewClient(&openapiutil.Config{
AccessKeyId: tea.String(requireEnv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(requireEnv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
SecurityToken: tea.String(os.Getenv("ALIBABA_CLOUD_SECURITY_TOKEN")),
RegionId: tea.String(requireEnv("SANDBOX_REGION_ID")),
Endpoint: tea.String(requireEnv("SANDBOX_ENDPOINT")),
})
if err != nil {
log.Fatal(err)
}
// 设置或更新配额。
resp, err := client.UpdateQuota(&sandbox.UpdateQuotaRequest{
Body: &sandbox.Quota{
TagValue: tea.String(requireEnv("SANDBOX_TEAM_ID")),
CpuCores: tea.Int32(32),
MemoryGB: tea.Int32(64),
InstanceCount: tea.Int32(16),
},
})
if err != nil {
log.Fatalf("设置配额失败: %v", err)
}
printJSON(resp.Body)
}
在已安装 SDK 的 Go 项目中运行:
go run main.go
响应包含保存后的配额和请求 ID。需要再次调整时,修改 sandbox.Quota 中的目标值后调用同一接口。
以下查询、列表和删除示例复用上述导入、辅助函数和客户端初始化代码。将 main 中“设置或更新配额”注释之后的操作代码替换为对应示例即可,执行查询或删除不需要先运行更新操作。
查询配额
使用 DescribeQuota 查询指定 Team 的配额:
resp, err := client.DescribeQuota(&sandbox.DescribeQuotaRequest{
TagValue: tea.String(requireEnv("SANDBOX_TEAM_ID")),
})
if err != nil {
log.Fatalf("查询配额失败: %v", err)
}
printJSON(resp.Body)
查询配额列表
使用 ListQuota 分页查询账号下的配额列表:
var nextToken *string
for {
resp, err := client.ListQuota(&sandbox.ListQuotaRequest{
MaxResults: tea.Int32(100),
NextToken: nextToken,
})
if err != nil {
log.Fatalf("查询配额列表失败: %v", err)
}
printJSON(resp.Body)
nextToken = resp.Body.NextToken
if tea.StringValue(nextToken) == "" {
break
}
}
ListQuota 查询当前账号在目标地域的配额列表,不使用 SANDBOX_TEAM_ID 筛选。需要查询指定 Team 时,使用 DescribeQuota。
删除配额
删除操作仅移除该 Team 的配额配置,不删除 Team 本身,原配额值不保留。删除前建议先调用 DescribeQuota 记录当前配额值;删除后如需重新限制该 Team,调用 UpdateQuota 传入完整的 CPU、内存和存活实例数目标值。
确认该 Team 不再需要这项配额配置后,单独执行删除操作:
resp, err := client.DeleteQuota(&sandbox.DeleteQuotaRequest{
TagValue: tea.String(requireEnv("SANDBOX_TEAM_ID")),
})
if err != nil {
log.Fatalf("删除配额失败: %v", err)
}
printJSON(resp.Body)
删除后可通过 DescribeQuota 确认配置是否仍存在。返回 ResourceQuotaNotFound 表示未查到该配额配置。
生效说明
-
UpdateQuota更新tagValue指定的 Team。每次请求都需要传入 CPU 和内存目标值,不能仅传入其中一项。 -
配额按资源所在地域管理。调用时,Team、地域和接入点需要对应。
-
仅更新 CPU 和内存配额时,可以省略
instanceCount,存活实例数配额保持不变。需要调整或清除该项配额时,按参数表传入对应值。 -
更新成功表示配额配置已保存。创建 Sandbox 时,仍需满足账号级额度及相关产品使用限制。
常见问题
tagValue 应该填什么?
填写目标 Team 的 ID,不要填写 Team 名称、资源组 ID 或 API Key。获取方法参见创建 Team。
设置配额提示参数不合法
返回 InvalidParameter 时,检查 Team ID 格式、CPU 和内存字段是否齐全,以及这两项数值是否为非负整数。传入 instanceCount 时,取值必须为不小于 -1 的整数。
提示无权调用配额接口
检查调用身份的 RAM 权限及资源范围。查询账号配额列表需要 sandbox:ListQuotas,设置配额需要 sandbox:UpdateQuota。具体授权参见授权 RAM 用户访问控制台。若错误消息明确提示功能未开通,请联系产品支持确认目标地域和账号的开通条件。
设置配额提示超过账号额度
根据错误消息确认超限的是 CPU、内存还是其他配额项,再检查账号额度与已有 Team 配额。CPU 或内存额度不足时,调整各 Team 的分配,或申请提升对应账号额度。
设置的配额超过账号额度时,请求可能返回 LimitExceededError 等错误信息,应结合返回的 HTTP 状态码、错误码和消息判断,不能仅按 429 识别配额超限。
查询提示配额不存在
返回 ResourceQuotaNotFound 时,核对账号、地域和 Team ID,并确认该 Team 是否已配置配额、是否刚执行过删除。返回 TeamNotFound 时,先检查目标地域中是否存在该 Team。
请求失败后如何排查?
保留错误消息和请求 ID。检查访问凭证是否有效、地域与接入点是否一致。使用 STS 临时凭证时,确认 AccessKey ID、AccessKey Secret 和 SecurityToken 来自同一组凭证且未过期。参数、权限或额度问题应修正后再重试。