全部產品
Search
文件中心

Function Compute:建立 OSS Volume

更新時間:Oct 20, 2026

OSS Volume 儲存已有 OSS Bucket 或 Bucket 子目錄的掛載配置。建立完成後,可以在建立 Sandbox 時按 Volume 名稱掛載。

CreateVolume 只建立 Volume 中繼資料,不會建立、刪除或複製 OSS Bucket 和 Object。

前提條件

OSS 的產品說明和資源管理方式參見儲存空間(Bucket)概述。

使用前需要準備:

  • Volume 目前仍處於邀測階段,需要提交阿里雲工單申請開通。

  • 已在Function Compute雲沙箱控制台建立 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所需RAM帳號許可權

調用 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/*

沙箱動態掛載RAM角色要求的權限

為 Volume 中配置的 RAM 角色添加以下權限原則:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:ListObjects",
        "oss:AbortMultipartUpload",
        "oss:CompleteMultipartUpload",
        "oss:DeleteObject",
        "oss:InitiateMultipartUpload",
        "oss:ListParts",
        "oss:PutObject",
        "oss:UploadPart",
        "oss:PutBucket"
      ],
      "Resource": "*"
    }
  ]
}

安裝 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 掛載暫不支援 KMS(Key Management Service,Key Management Service)服務端加密(SSE-KMS)。

  • 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 中的資料。