OSS Volume 保存已有 OSS Bucket 或 Bucket 子目录的挂载配置。创建完成后,可以在创建 Sandbox 时按 Volume 名称挂载。
CreateVolume 只创建 Volume 元数据,不会创建、删除或复制 OSS Bucket 和 Object。
前提条件
OSS 的产品说明和资源管理方式参见存储空间(Bucket)概述。
使用前需要准备:
Volume 目前仍处于邀测阶段,需要提交阿里云工单申请开通。
已在函数计算云沙箱控制台创建 Team,并获取 Team ID。
已创建 OSS Bucket,并确定需要挂载的 Bucket 路径。
已获取 Bucket 所在地域的 OSS Endpoint,具体取值参见通过Endpoint和Bucket域名访问OSS。
调用 POP SDK 的阿里云身份具备
fcsandbox:CreateVolume权限;查询 Volume 需要fcsandbox:ListVolumes和fcsandbox:GetVolume权限;删除 Volume 还需要fcsandbox:DeleteVolume权限。
Team 的创建和 Team ID 获取方式参见创建 Team。
权限配置
调用 Volume API 的 RAM 身份需要以下权限,请替换占位符:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"fcsandbox:CreateVolume",
"fcsandbox:ListVolumes",
"fcsandbox:GetVolume",
"fcsandbox:DeleteVolume"
],
"Resource": "*"
}
]
}生产环境支持按 Team 精确授权 Volume 资源:
acs:fcsandbox:<region>:<account-id>:teams/<team-id>/volumes/*安装 SDK
云沙箱 OpenAPI 当前支持 Java、Python、Go 和 TypeScript SDK。支持范围、安装方式和版本以阿里云 SDK & API 说明为准。本文使用 Python 演示。
python3 -m venv .venv
source .venv/bin/activate
pip install "alibabacloud_fcsandbox20260509>=1.3.0"运行示例前设置以下环境变量:
export ALIBABA_CLOUD_ACCESS_KEY_ID="<YOUR-ACCESS-KEY-ID>"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="<YOUR-ACCESS-KEY-SECRET>"
# 使用 STS 临时凭证时还需要设置:
# export ALIBABA_CLOUD_SECURITY_TOKEN="<YOUR-SECURITY-TOKEN>"
export FCSANDBOX_REGION_ID="cn-hangzhou"
export FCSANDBOX_ENDPOINT="fcsandbox.cn-hangzhou.aliyuncs.com"
export FCSANDBOX_TEAM_ID="<team-id>"
export OSS_BUCKET_NAME="<bucket-name>"
export OSS_BUCKET_PATH="/agent-workspace"
export OSS_ENDPOINT="https://oss-cn-hangzhou.aliyuncs.com"FCSANDBOX_ENDPOINT 不包含 https://。如果 SDK 已内置目标地域的 Endpoint,可以不设置该变量,由 SDK 根据 FCSANDBOX_REGION_ID 解析。
创建 OSS Volume
请求参数、返回参数和错误码以 OpenAPI 门户的 CreateVolume - 创建 Volume 为准。
OSSVolumeConfig 字段说明:
字段 | 是否必填 | 说明 |
| 是 | OSS Bucket 名称。 |
| 是 | Bucket 内的挂载路径;挂载根目录时设置为 |
| 是 | OSS Endpoint,应与 Bucket 所在地域匹配。 |
| 是 | 是否只读挂载; |
以下示例创建 OSS Volume 并输出创建结果。将代码保存为 07_create_oss_volume.py:
import os
from alibabacloud_fcsandbox20260509 import models
from alibabacloud_fcsandbox20260509.client import Client as FCSandboxClient
from alibabacloud_tea_openapi import models as open_api_models
def require_env(name: str) -> str:
value = os.environ.get(name, "").strip()
if not value:
raise RuntimeError(f"缺少环境变量: {name}")
return value
config = open_api_models.Config(
access_key_id=require_env("ALIBABA_CLOUD_ACCESS_KEY_ID"),
access_key_secret=require_env("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
security_token=os.environ.get("ALIBABA_CLOUD_SECURITY_TOKEN"),
region_id=require_env("FCSANDBOX_REGION_ID"),
)
if os.environ.get("FCSANDBOX_ENDPOINT"):
config.endpoint = os.environ["FCSANDBOX_ENDPOINT"]
pop_client = FCSandboxClient(config)
team_id = require_env("FCSANDBOX_TEAM_ID")
response = pop_client.create_volume(
models.CreateVolumeRequest(
body=models.CreateVolumeInput(
team_id=team_id,
volume_name="oss-workspace",
oss_volume_config=models.OSSVolumeConfig(
bucket_name=require_env("OSS_BUCKET_NAME"),
bucket_path=require_env("OSS_BUCKET_PATH"),
endpoint=require_env("OSS_ENDPOINT"),
read_only=False,
),
)
)
)
if response.body is None or response.body.volume is None:
raise RuntimeError("CreateVolume 未返回 Volume")
volume = response.body.volume
print(f"request_id={response.body.request_id}")
print(f"volume_id={volume.volume_id}")
print(f"volume_name={volume.volume_name}")
print(f"storage_class={volume.storage_class}")
print(f"status={volume.status}")
print("OSS Volume 创建成功")运行示例:
python 07_create_oss_volume.py创建成功仅表示 Volume 元数据创建成功。参见挂载 OSS Volume将该 Volume 挂载到 Sandbox,并通过实际读写确认挂载可用。
管理 Volume
通过 ListVolumes 查询 Volume 列表,通过 GetVolume 查看详情,通过 DeleteVolume 删除不再使用的 Volume。
删除 Volume 只删除云沙箱侧的挂载配置,不会删除 OSS Bucket 或其中的数据。
使用限制
OSS Endpoint 应与 Bucket 所在地域和网络环境匹配。
bucket_path必须填写;挂载 Bucket 根目录时设置为/。同一 Team 中的 Volume 名称不能重复。
常见问题
POP SDK 返回 Forbidden 错误码
检查调用身份是否具备对应的 FCSandbox Volume API 权限,以及是否有目标 Team 的 Volume 资源权限。
返回 TeamNotFound 错误码
检查 Team ID、地域和账号是否匹配。
返回 CreateVolumeNotSupported 或 NotFound 错误码
确认当前账号、地域和 Team 已开通 Volume 与 OSS Volume 能力。
返回 InvalidParameter 错误码
根据 CreateVolume API 文档检查 Bucket、Bucket 路径、Endpoint 和 read_only 设置。
返回 VolumeConflict 错误码
同一 Team 中已存在同名 Volume。可通过 ListVolumes 查询 Volume 列表,通过 GetVolume 查看详情。确认不再使用后,通过 DeleteVolume 删除,或更换 Volume 名称。
删除 Volume 后 OSS 数据是否保留
保留。删除 Volume 只删除云沙箱侧的 Volume 元数据,不会删除 OSS 中的数据。