创建 OSS Volume

更新时间:
复制 MD 格式

OSS Volume 保存已有 OSS Bucket 或 Bucket 子目录的挂载配置。创建完成后,可以在创建 Sandbox 时按 Volume 名称挂载。

CreateVolume 只创建 Volume 元数据,不会创建、删除或复制 OSS Bucket 和 Object。

前提条件

OSS 的产品说明和资源管理方式参见存储空间(Bucket)概述

使用前需要准备:

  • Volume 目前仍处于邀测阶段,需要提交阿里云工单申请开通。

  • 已在函数计算云沙箱控制台创建 Team,并获取 Team ID。

  • 已创建 OSS Bucket,并确定需要挂载的 Bucket 路径。

  • 已获取 Bucket 所在地域的 OSS Endpoint,具体取值参见通过EndpointBucket域名访问OSS

  • 调用 POP SDK 的阿里云身份具备 fcsandbox:CreateVolume 权限;查询 Volume 需要 fcsandbox:ListVolumesfcsandbox: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 字段说明:

字段

是否必填

说明

bucket_name

OSS Bucket 名称。

bucket_path

Bucket 内的挂载路径;挂载根目录时设置为 /

endpoint

OSS Endpoint,应与 Bucket 所在地域匹配。

read_only

是否只读挂载;true 表示只读,false 表示可读写。

以下示例创建 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、地域和账号是否匹配。

返回 CreateVolumeNotSupportedNotFound 错误码

确认当前账号、地域和 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 中的数据。