创建Agentic Bucket和Bucket Space

更新时间:
复制 MD 格式

创建Agentic Bucket和Bucket Space是使用Agentic Bucket服务的前提。本文介绍如何通过OSS管理控制台或API创建Agentic Bucket,并在其下创建Bucket Space。

前提条件

重要

Agentic Bucket功能仅支持华东1(杭州)、华北2(北京)和日本(东京)地域。使用前请提交工单申请开通。

  • 已开通OSS服务。

  • 通过RAM用户操作时,该RAM用户已被授予Agentic Bucket相关操作权限。关于为RAM用户授权的具体操作,请参见RAM Policy概述。

  • 通过API创建Bucket Space时,已创建用于签名OSS API请求的AccessKey。

操作步骤

Agentic Bucket的完整名称由名称前缀与系统自动追加的-{UID}-{地域}-ab-apsr后缀构成;Bucket Space的完整名称由名称前缀与-{UID}-{地域}-bs-apsr后缀构成。名称前缀最少3个字符,仅支持小写字母、数字和短横线,不能以短横线开头或结尾,完整名称总长度为3~63字符。例如,账号UID为1234567890123456,在华东1(杭州)输入Agentic Bucket名称前缀my-agentic,创建完成后Agentic Bucket完整名称为my-agentic-1234567890123456-cn-hangzhou-ab-apsr。

步骤一:创建Agentic Bucket

在创建Agentic Bucket时配置的存储类型、冗余类型、ACL、版本控制、服务端加密、阻止公共访问等参数将作为模板,应用于该Agentic Bucket下后续创建的Bucket Space。创建完成后,模板参数可通过Agentic Bucket属性配置接口修改,修改仅对修改后新建的Bucket Space生效。

  1. 登录OSS管理控制台,进入Agentic Bucket列表页面。

  2. 单击创建Agentic Bucket。

  3. 在创建对话框中,配置以下参数:

    参数

    说明

    名称前缀

    填写Agentic Bucket名称前缀。前缀最少3个字符,仅支持小写字母、数字和短横线,不能以短横线开头或结尾;系统自动追加-{UID}-{地域}-ab-apsr后缀构成完整名称,完整名称总长度不能超过63字符。

    地域

    选择Agentic Bucket所在地域。可用地域以控制台实际可选项为准。

    存储类型

    选择Agentic Bucket的存储类型。默认为标准,可选值为标准、低频访问、归档。

    冗余类型

    选择数据冗余类型。默认推荐ZRS(同城冗余),可选值为ZRS(同城冗余)、LRS(本地冗余)。

    读写权限(ACL)

    选择Agentic Bucket的读写权限。默认为私有,可选值为私有、公共读、公共读写。

    版本控制

    选择是否开启版本控制。默认为关闭。开启后,Bucket Space中被覆盖或删除的数据将保留历史版本,用于防止误删误覆盖。

    服务端加密

    选择服务端加密方式。默认为无,可选值为无、AES256、SM4、KMS。

    实时日志查询

    选择是否开启实时日志查询。默认为关闭。

    阻止公共访问

    选择是否开启阻止公共访问。默认为开启。开启后,该Agentic Bucket下所有Bucket Space的公共访问将被阻止。

  4. 单击确定,完成创建。

创建完成后,可在Agentic Bucket列表页面查看其访问域名,形式为{完整名称}.oss-{地域}.aliyuncs.com(外网)与{完整名称}.oss-{地域}-internal.aliyuncs.com(内网),该域名将用于Agentic Bucket本身的管控配置时使用,Agentic Bucket自身对应的OSS外网域名可直接访问。

步骤二:创建Bucket Space

Bucket Space在Agentic Bucket之下创建,其存储类型、冗余类型、ACL、版本控制、服务端加密、阻止公共访问等全部配置均可直接继承其所属的Agentic Bucket。

重要

Agentic Bucket处于禁用状态时,无法创建Bucket Space。

重要

Bucket Space对应的标准OSS公网域名不允许直接访问,必须先将自定义泛域名绑定在Agentic Bucket上,再通过{bucketspace-name}.{泛域名基础域}形式的域名访问。

控制台

  1. 在Agentic Bucket列表页面,单击目标Agentic Bucket,进入其Bucket Space管理页面。

  2. 单击创建Bucket Space。

  3. 配置Bucket Space名称。Bucket Space完整名称以-bs-apsr结尾,命名约束与Agentic Bucket一致。确认无误后,单击确定,完成创建。

API

调用PutBucket接口,Host填写Bucket Space完整名称,并通过x-oss-agentic-bucket请求头或Query参数指定所属Agentic Bucket。请求不接受其他PutBucket请求头或Body。API调用可以使用内网Endpoint(从同地域内网环境发起),也可以使用绑定在所属Agentic Bucket上的自定义泛域名CNAME。

请求示例(Header方式)如下:

PUT / HTTP/1.1
Host: my-agent-sandbox-1234567890123456-cn-hangzhou-bs-apsr.oss-cn-hangzhou-internal.aliyuncs.com
x-oss-agentic-bucket: my-agentic-1234567890123456-cn-hangzhou-ab-apsr
Date: GMT Date
Authorization: SignatureValue

请求示例(Query方式)如下:

PUT /?x-oss-agentic-bucket=my-agentic-1234567890123456-cn-hangzhou-ab-apsr HTTP/1.1
Host: my-agent-sandbox-1234567890123456-cn-hangzhou-bs-apsr.oss-cn-hangzhou-internal.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue

创建成功返回200 OK。常见错误包括:InvalidBucketName(名称不合法)、AgenticBucketNotFound(指定的Agentic Bucket不存在)、BucketAlreadyExists(同名Bucket Space已存在)。

SDK

您可以使用OSS SDK在指定的Agentic Bucket下创建Bucket Space,各语言的代码示例如下。

import com.aliyun.sdk.service.oss2.ClientConfiguration;
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.agentic.BucketSpaceClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class BucketSpacePutBucketSample {
    public static void main(String[] args) throws Exception {
        String region = "cn-hangzhou";
        String accountId = "1234567890123456";
        String agenticBucketPrefix = "my-agentic";
        String bucketSpacePrefix = "my-space";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();

        try (OSSClient client = BucketSpaceClient.create(ClientConfiguration.newBuilder()
                .credentialsProvider(provider)
                .region(region)
                .accountId(accountId)
                .build())) {

            PutBucketResult result = client.putBucket(PutBucketRequest.newBuilder()
                    .bucket(bucketSpacePrefix)
                    .agenticBucket(String.format("%s-%s-%s-ab-apsr", agenticBucketPrefix, accountId, region))
                    .build());

            System.out.printf("status code:%d, request id:%s%n",
                    result.statusCode(), result.requestId());

        } catch (Exception e) {
            System.out.printf("error:%n%s", e);
        }
    }
}
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.agentic as oss_agentic

# 创建命令行参数解析器,并描述脚本用途:创建BucketSpace
parser = argparse.ArgumentParser(description="bucket space put bucket sample")

# 定义命令行参数,包括必需的地域、BucketSpace名称前缀、账号ID、
# 所属Agentic Bucket名称前缀以及可选的Endpoint
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The bucket space prefix name.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--account_id', help='The account id.', required=True)
parser.add_argument('--agentic_bucket', help='The agentic bucket that the bucket space belongs to.', required=True)

def main():
    # 解析命令行参数,获取用户输入的值
    args = parser.parse_args()

    # 从环境变量中加载访问凭证信息,用于身份验证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK默认配置创建配置对象,并设置认证提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 设置配置对象的地域和账号ID属性
    cfg.region = args.region
    cfg.account_id = args.account_id

    # 如果提供了自定义Endpoint,则更新配置对象中的endpoint属性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作,
    # 并自动将BucketSpace名称前缀解析为完整名称{prefix}-{account_id}-{region}-bs-apsr
    client = oss_agentic.BucketSpaceClient.create(cfg)

    # 在指定的Agentic Bucket下创建BucketSpace。PutBucketRequest的bucket参数
    # 为BucketSpace名称前缀,agentic_bucket参数为所属Agentic Bucket的完整名称
    result = client.put_bucket(oss.models.PutBucketRequest(
        bucket=args.bucket,  # BucketSpace名称前缀
        agentic_bucket=f'{args.agentic_bucket}-{args.account_id}-{args.region}-ab-apsr',  # AgenticBucket完整名称
    ))

    # 打印操作结果的状态码和请求ID,以便确认请求状态
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# 当此脚本被直接执行时,调用main函数开始处理逻辑
if __name__ == "__main__":
    main()
package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/agentic"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region        string
	bucket        string
	endpoint      string
	accountId     string
	agenticBucket string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucket, "bucket", "", "The bucket space prefix name.")
	flag.StringVar(&endpoint, "endpoint", "", "The domain names that other services can use to access OSS.")
	flag.StringVar(&accountId, "account-id", "", "The account id.")
	flag.StringVar(&agenticBucket, "agentic-bucket", "", "The agentic bucket that the bucket space belongs to.")
}

func main() {
	flag.Parse()
	if len(bucket) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	if len(accountId) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, account id required")
	}
	if len(agenticBucket) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, agentic bucket name required")
	}

	// 使用SDK默认配置创建配置对象,并从环境变量中加载访问凭证
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).
		WithAccountId(accountId)
	if len(endpoint) > 0 {
		cfg.WithEndpoint(endpoint)
	}

	// 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作,
	// 并自动将BucketSpace名称前缀解析为完整名称{bucket}-{accountId}-{region}-bs-apsr
	client := agentic.NewBucketSpaceClient(cfg)

	// 在指定的Agentic Bucket下创建BucketSpace。PutBucketRequest的Bucket参数
	// 为BucketSpace名称前缀,Agentic Bucket参数为所属Agentic Bucket的完整名称
	request := &oss.PutBucketRequest{
		Bucket:        oss.Ptr(bucket),
		AgenticBucket: oss.Ptr(fmt.Sprintf("%s-%s-%s-ab-apsr", agenticBucket, accountId, region)),
	}
	result, err := client.PutBucket(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket space %v", err)
	}
	log.Printf("put bucket space result:%#v\n", result)
}
<?php

// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\BucketSpaceClient;

// 定义命令行参数描述,包括必需的地域、BucketSpace名称前缀、账号ID、
// 所属AgenticBucket名称前缀以及可选的Endpoint
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
    "account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
    "bucket" => ['help' => 'The bucket space prefix name.', 'required' => True],
    "agentic-bucket" => ['help' => 'The agentic bucket that the bucket space belongs to.', 'required' => True],
];
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help";
        exit(1);
    }
}

$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
$agenticBucket = $options["agentic-bucket"];

// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// 使用SDK默认配置创建配置对象。BucketSpaceClient会根据地域和账号ID
// 自动将BucketSpace名称前缀解析为完整名称:{prefix}-{accountId}-{region}-bs-apsr
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作
$client = BucketSpaceClient::newClient($cfg);

try {
    // 在指定的AgenticBucket下创建BucketSpace。PutBucketRequest的bucket参数
    // 为BucketSpace名称前缀,agenticBucket参数为所属AgenticBucket的完整名称
    $request = new Oss\Models\PutBucketRequest($bucket);
    $request->agenticBucket = sprintf('%s-%s-%s-ab-apsr', $agenticBucket, $accountId, $region);

    $result = $client->putBucket($request);

    printf(
        'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
        $result->statusCode,
        $result->requestId
    );
} catch (\Throwable $e) {
    printf("error: %s" . PHP_EOL, $e->getMessage());
    exit(1);
}
import AlibabaCloudOSS
import AlibabaCloudOSSAgentic
import Foundation
import ArgumentParser

@main
struct BucketSpacePutBucket: AsyncParsableCommand {
    func run() async throws {
        do {
            // 设置 OSS 区域(Region)
            let region = "cn-hangzhou"

            // 设置阿里云账号ID
            let accountId = "1234567890123456"

            // 设置所属AgenticBucket的名称前缀
            let agenticBucketPrefix = "my-agentic"

            // 设置要创建的BucketSpace名称前缀
            let bucketSpacePrefix = "my-space"

            // 创建配置对象,设置区域和账号ID
            let config = Configuration.default()
                .withRegion(region)
                .withCredentialsProvider(EnvironmentCredentialsProvider())
                .withAccountId(accountId)

            // 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作,
            // 并自动将BucketSpace名称前缀解析为完整名称:
            // {prefix}-{accountId}-{region}-bs-apsr
            let client = BucketSpaceClient.make(config)

            // 调用 putBucket 接口在指定的AgenticBucket下创建BucketSpace。
            // bucket参数为BucketSpace名称前缀,
            // agenticBucket参数为所属AgenticBucket的完整名称
            let result = try await client.putBucket(
                PutBucketRequest(
                    bucket: bucketSpacePrefix,
                    agenticBucket: "\(agenticBucketPrefix)-\(accountId)-\(region)-ab-apsr"
                )
            )

            // 打印请求结果信息
            print("PutBucket done, StatusCode:\(result.statusCode), RequestId:\(result.requestId).")
        } catch {
            BucketSpacePutBucket.exit(withError: error)
        }
    }
}

创建完成后,可调用ListBucketSpaces接口列举该Agentic Bucket名下的Bucket Space,或调用GetBucketInfo接口查看Bucket Space信息(响应中的AgenticBucketName字段即其所属Agentic Bucket名称)。

Bucket Space的管控操作(如配置ACL、版本控制)和数据操作(如上传、下载Object)与普通Bucket的对应接口完全一致,调用时将Host填写为Bucket Space完整名称即可。删除Bucket Space同样可复用DeleteBucket接口。

后续步骤

Agentic Bucket管理接口的完整API说明,请参见CreateAgenticBucket、GetAgenticBucket、ListAgenticBuckets、PutAgenticBucketStatus、DeleteAgenticBucket、ListBucketSpaces和Agentic Bucket属性配置接口。