创建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生效。
登录OSS管理控制台,进入Agentic Bucket列表页面。
单击创建Agentic Bucket。
在创建对话框中,配置以下参数:
参数
说明
名称前缀
填写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的公共访问将被阻止。
单击确定,完成创建。
创建完成后,可在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}.{泛域名基础域}形式的域名访问。
控制台
在Agentic Bucket列表页面,单击目标Agentic Bucket,进入其Bucket Space管理页面。
单击创建Bucket Space。
配置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(®ion, "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属性配置接口。