创建 Sandbox 时,可通过 metadata 将 AgenticSpace Access Point 或其子目录挂载到 Sandbox 内的本地目录,无需预先创建 Volume。
功能介绍
创建 Sandbox 时,可以通过 metadata 将 AgenticSpace Access Point 或其子目录挂载到 Sandbox 内,无需预先创建 Volume。挂载后,应用通过本地挂载目录访问数据。
如需向运行中的 Sandbox 增加挂载,请参见追加挂载 AgenticFS。
适用范围
AgenticFS 的产品说明参见什么是 AgenticFS,相关资源在 NAS 控制台创建和管理。
-
已创建 AgenticFS、AgenticSpace 和启用 RAM(Resource Access Management,访问控制)认证的 AgenticSpace Access Point(以下简称 Access Point),并确认 Access Point 处于
active状态。 -
已获取 Access Point 地址,例如
ap-<ACCESS-POINT-ID>.<FILE-SYSTEM-ID>-<SUFFIX>.<REGION>.nas.aliyuncs.com:/。 -
已准备与 Access Point 网络连通的 VPC(Virtual Private Cloud,专有网络)、交换机和安全组。
-
已准备智能体沙箱 API Key 和可用模板。
-
已准备 RAM 角色,信任策略允许函数计算服务扮演,并具备目标存储所需的访问权限。角色创建方法参见创建 RAM 角色,存储权限策略参见创建 AgenticFS Volume。
第二代运行时镜像要求
使用第二代运行时(MicroVM)自定义模板时,需在构建模板前预装存储客户端。客户端安装、镜像构建和验证方法参见挂载 AgenticFS Volume。
安装 SDK
创建并激活 Python 虚拟环境,然后安装 E2B SDK:
python3 -m venv .venv
source .venv/bin/activate
pip install e2b==2.31.0
挂载配置
创建 Sandbox 时,在 metadata 中提供以下配置:
|
metadata 键 |
值的格式 |
说明 |
|
|
JSON 字符串 |
AgenticFS 挂载配置,字段见下表。 |
|
|
JSON 字符串 |
完整 VPC 配置,包含 |
|
|
字符串 |
访问目标存储的有效 RAM 角色 ARN(Alibaba Cloud Resource Name,资源名称),必须提供且不能为空字符串。 |
创建时直接挂载,需同时通过 fc.sandbox.network.vpc 提供完整 VPC 配置,值为 JSON 字符串。模板或同一请求中 Volume 的 VPC 配置不能替代该 metadata。
fc.sandbox.storage.agenticfs 的 JSON 结构如下。提交时需将其序列化为字符串,不能直接传入 Python 字典或 JavaScript 对象:
{
"userID": 1000,
"groupID": 1000,
"mountPoints": [
{
"serverAddr": "ap-<ACCESS-POINT-ID>.<FILE-SYSTEM-ID>-<SUFFIX>.<REGION>.nas.aliyuncs.com:/project-a",
"mountDir": "/mnt/agenticfs"
}
]
}
|
字段 |
类型 |
是否必填 |
说明 |
|
|
整数 |
否 |
挂载使用的用户 ID,取值范围为 |
|
|
整数 |
否 |
挂载使用的用户组 ID,取值范围为 |
|
|
对象数组 |
是 |
AgenticFS 挂载点列表,至少包含一个挂载点。 |
|
|
字符串 |
是 |
Access Point 地址,最长 128 个字符。不能使用普通 NAS 挂载地址或带协议前缀的 URL;可以在 |
|
|
字符串 |
是 |
Sandbox 内的本地挂载目录,最长 128 个字符,必须是规范化的绝对 Unix 路径,例如 |
metadata 键必须使用全小写的 fc.sandbox.storage.agenticfs。配置中的字段名也区分大小写,必须使用 userID、groupID、serverAddr 和 mountDir。平台自动启用 TLS,不要传入 enableTLS;配置采用严格 JSON 解析,readOnly 等未声明字段会导致请求失败。
挂载 Access Point 下的子目录
在 serverAddr 的 :/ 后指定远端目录,可以只挂载 Access Point 下的子目录,例如 ap-<ACCESS-POINT-ID>.<FILE-SYSTEM-ID>-<SUFFIX>.<REGION>.nas.aliyuncs.com:/project-a。子目录不存在时,系统会在首次挂载时自动创建。
远端目录须使用规范化的绝对路径,不能包含空白字符、控制字符、重复分隔符、. 或 ..。除根目录 / 外,路径不能以 / 结尾。
AgenticFS 的权限边界由 Access Point 决定。其下的远端子目录只用于选择挂载位置,不能进一步收窄 STS(Security Token Service,安全令牌服务)临时凭证的访问范围。需要隔离数据时,应使用独立的 Access Point。
本地挂载目录
mountDir 表示 Sandbox 内的本地挂载目录,远端目录通过存储配置单独指定。建议使用 /home、/mnt、/tmp 或 /data 的子目录,避免覆盖模板内已有内容。目录限制参见使用限制。
环境变量说明
|
环境变量 |
用途 |
取值来源或填写方式 |
|
|
调用智能体沙箱接口的 API Key。 |
在智能体沙箱控制台创建,使用目标 Team 的 API Key。 |
|
|
智能体沙箱 E2B API 地址。 |
|
|
|
SDK 访问 Sandbox 的域名。 |
|
|
|
创建 Sandbox 使用的模板 ID 或别名。 |
在智能体沙箱控制台选择满足本文客户端要求的模板。 |
|
|
Access Point 地址及远端目录。 |
在 NAS 控制台获取 Access Point 地址,在 |
|
|
挂载使用的 UID。 |
根据 Sandbox 内访问数据的用户设置;示例为 |
|
|
挂载使用的 GID。 |
根据 Sandbox 内访问数据的用户组设置;示例为 |
|
|
Sandbox 所在的 VPC。 |
在专有网络控制台获取,需与目标存储网络连通。 |
|
|
Sandbox 使用的安全组。 |
在 ECS 控制台获取,需属于所选 VPC,并允许访问目标存储。 |
|
|
Sandbox 使用的交换机。 |
在专有网络控制台获取,需属于所选 VPC。 |
|
|
访问目标存储的 RAM 角色 ARN。 |
创建 RAM 角色后,在 RAM 控制台的角色详情中获取。 |
挂载并验证
先设置环境变量,替换示例中的占位符;API 地址、模板和存储需使用匹配的地域及网络配置:
export E2B_API_KEY="<YOUR-E2B-API-KEY>"
export E2B_API_URL="https://api.<REGION>.sandbox.aliyuncs.com"
export E2B_DOMAIN="<REGION>.sandbox.aliyuncs.com"
export E2B_TEMPLATE="<TEMPLATE-ID>"
export AGENTICFS_SERVER_ADDR="ap-<ACCESS-POINT-ID>.<FILE-SYSTEM-ID>-<SUFFIX>.<REGION>.nas.aliyuncs.com:/"
export AGENTICFS_USER_ID="1000"
export AGENTICFS_GROUP_ID="1000"
export SANDBOX_VPC_ID="vpc-xxxxxxxx"
export SANDBOX_SECURITY_GROUP_ID="sg-xxxxxxxx"
export SANDBOX_VSWITCH_ID="vsw-xxxxxxxx"
export SANDBOX_ROLE_ARN="acs:ram::<ACCOUNT-ID>:role/<ROLE-NAME>"
示例会在挂载目录中创建带随机标识的独立测试文件,写入并读取校验后删除该文件,再释放本次创建的 Sandbox。请使用具备读写权限的挂载配置。
将以下代码保存为 12_sandbox_agenticfs.py:
import json
import os
from uuid import uuid4
from e2b import Sandbox
def require_env(name: str) -> str:
value = os.environ.get(name, "").strip()
if not value:
raise RuntimeError(f"缺少环境变量: {name}")
return value
mount_dir = "/mnt/agenticfs"
marker_path = f"{mount_dir}/hello-agenticfs-{uuid4().hex}.txt"
agenticfs_config = {
"userID": int(require_env("AGENTICFS_USER_ID")),
"groupID": int(require_env("AGENTICFS_GROUP_ID")),
"mountPoints": [
{
"serverAddr": require_env("AGENTICFS_SERVER_ADDR"),
"mountDir": mount_dir,
}
],
}
vpc_config = {
"vpcId": require_env("SANDBOX_VPC_ID"),
"securityGroupId": require_env("SANDBOX_SECURITY_GROUP_ID"),
"vSwitchIds": [require_env("SANDBOX_VSWITCH_ID")],
}
sandbox = None
marker_written = False
try:
sandbox = Sandbox.create(
template=require_env("E2B_TEMPLATE"),
timeout=300,
api_key=require_env("E2B_API_KEY"),
api_url=require_env("E2B_API_URL"),
domain=require_env("E2B_DOMAIN"),
metadata={
"fc.sandbox.storage.agenticfs": json.dumps(agenticfs_config),
"fc.sandbox.network.vpc": json.dumps(vpc_config),
"fc.sandbox.auth.role": require_env("SANDBOX_ROLE_ARN"),
},
)
sandbox.files.write(marker_path, "hello agenticfs\n")
marker_written = True
content = sandbox.files.read(marker_path)
if content != "hello agenticfs\n":
raise RuntimeError(f"文件内容不一致: {content!r}")
finally:
try:
if sandbox is not None and marker_written:
sandbox.files.remove(marker_path)
finally:
if sandbox is not None:
sandbox.kill()
print("AgenticFS 动态挂载读写验证成功")
运行示例:
python 12_sandbox_agenticfs.py
输出 AgenticFS 动态挂载读写验证成功 表示本次读写、测试文件清理和 Sandbox 释放已完成。
行为说明
释放 Sandbox 不会删除底层存储数据。测试文件由示例主动删除,其他数据的保留和清理需通过存储服务或挂载目录单独处理。
使用限制
-
本地挂载目录必须是规范化的绝对 Unix 路径,不能为
/,不能包含前后空格、.、..或重复的路径分隔符。 -
本地挂载目录不能使用
/bin、/opt、/var、/dev等系统目录及其子目录,也不能包含.cache等隐藏目录。如需通过隐藏目录访问数据,可挂载到符合要求的目录后,再创建指向挂载目录的符号链接。 -
同一个 Sandbox 中的本地挂载目录不能重复,包括不同存储类型的挂载目录。
-
同一个 Sandbox 最多包含 5 个 AgenticFS 挂载点,按创建时与后续追加的挂载累计计算,包括直接配置和引用 Volume 的挂载。
-
同一个 Sandbox 中的多个 AgenticFS 挂载点共用同一组
userID和groupID:单次挂载配置内的所有挂载点共用该组取值,追加挂载指定的 UID/GID 也不得与当前 Sandbox 已有配置冲突。
常见问题
已配置 VPC,为什么仍提示配置不完整
错误消息包含 mount requires complete VPC config,表示本次创建使用的 VPC 配置缺少必填项。
在本次创建请求的 metadata 中,通过 fc.sandbox.network.vpc 传入包含 vpcId、securityGroupId 和非空 vSwitchIds 的 JSON 字符串。直接提供挂载配置时,需同时提供这项 metadata,模板或同一请求中 Volume 的 VPC 配置均不能替代。
创建 Sandbox 提示缺少 RAM 角色
错误消息包含 AgenticFS mount requires Function role,表示本次创建未获得挂载所需的 RAM 角色。
按本文示例,在创建请求的 metadata 中通过 fc.sandbox.auth.role 提供有效的角色 ARN,然后重新提交创建请求。角色配置方法参见创建 RAM 角色。
metadata 提示未知字段
错误消息包含 json: unknown field 时,根据消息指出的字段核对配置。AgenticFS 只接受本文参数表中声明的字段,且字段名区分大小写。
例如,使用 userID 而非 userId,使用 serverAddr 而非 serveraddr;删除 enableTLS、readOnly 等不支持的字段。TLS 由平台启用,无需在挂载配置中设置。
Sandbox 创建超时或挂载失败
如果错误消息未指出具体参数问题,可按以下顺序排查实际挂载条件:
-
确认 Access Point 处于
active状态,地址和远端目录填写正确。 -
检查 Sandbox 所用 VPC 的路由、安全组及与 Access Point 的连通性。
-
检查实际使用的 RAM 角色,确认信任策略允许函数计算服务扮演,且具备目标存储所需的访问权限。
-
使用第二代运行时自定义模板时,按本文镜像要求验证 AgenticFS 客户端。
如需进一步排查,请保留完整错误信息和请求 ID。