Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
创建目录存储桶
要开始使用 Amazon S3 Express One Zone 存储类,您需要创建一个目录存储桶。S3 Express One Zone 存储类只能用于目录存储桶。S3 Express One Zone 存储类支持低延迟使用案例,并在单个可用区内提供更快的数据处理速度。如果您的应用程序注重性能,并且受益于个位数毫秒的 PUT
和 GET
延迟,我们建议您创建一个目录存储桶,以便可以使用 S3 Express One Zone 存储类。
Amazon S3 存储桶有两种类型:通用存储桶和目录存储桶。您应该选择适合您应用程序和性能要求的存储桶类型。通用存储桶是最初的 S3 存储桶类型。对于大多数使用案例和访问模式,建议使用通用桶,通用桶允许在除 S3 Express One Zone 之外的所有存储类中存储对象。有关通用存储桶的更多信息,请参阅存储桶概述。
目录存储桶使用 S3 Express One Zone 存储类,该存储类专用于需要一致的个位数毫秒延迟的工作负载或性能关键型应用程序。S3 Express One Zone 是第一种可以在其中选择单个可用区的 S3 存储类,您可以选择将您的对象存储与计算资源联合托管在一个位置,从而提供尽可能高的访问速度。创建目录存储桶时,您可以选择指定 Amazon EC2、Amazon Elastic Kubernetes Service 或 Amazon Elastic Container Service(Amazon ECS)计算实例的本地 Amazon Web Services 区域和可用区,以优化性能。
使用 S3 Express One Zone,您的数据将冗余地存储在单个可用区中的多个设备上。S3 Express One Zone 设计为在单个可用区内提供 99.95% 的可用性,并由 Amazon S3 服务等级协议提供支持。有关更多信息,请参阅 单可用区
目录桶将数据按层次结构组织到目录中,而不是通用桶的扁平存储结构。目录存储桶没有前缀限制,单个目录可以横向扩展。
有关目录存储桶的更多信息,请参阅目录桶。
目录存储桶名称
目录存储桶名称必须遵循以下格式并遵守目录存储桶命名规则:
bucket-base-name
--azid
--x-s3
例如,以下目录存储桶名称包含可用区 ID usw2-az1
:
bucket-base-name
--usw2-az1--x-s3
有关目录存储桶命名规则的更多信息,请参阅目录存储桶命名规则。
登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/。
-
在页面顶部的导航栏中,选择当前所显示 Amazon Web Services 区域的名称。接下来,选择要在其中创建存储桶的区域。
要最大程度地减少延迟和成本以及满足法规要求,请选择一个靠近您的区域。在某一区域存储的对象将一直留在该区域,除非您特意将其转移到其他区域。有关 Amazon S3 Amazon Web Services 区域的列表,请参阅《Amazon Web Services 一般参考》中的 Amazon Web Service 端点。
-
在左侧导航窗格中,选择存储桶。
-
选择创建存储桶。
此时将打开创建存储桶页面。
-
在常规配置下,查看将在其中创建存储桶的 Amazon Web Services 区域。
-
在存储桶类型下,请选择目录。
对于可用区,请选择计算服务本地的可用区。有关支持目录桶和 S3 Express One Zone 存储类的可用区列表,请参阅S3 Express One Zone 可用区和区域。
-
在可用区下,选中复选框以确认在可用区中断时,您的数据可能不可用或丢失。
尽管目录桶存储在单个可用区中的多个设备上,但目录桶不会跨可用区冗余存储数据。
-
对于存储桶名称,请输入目录存储桶的名称。
目录存储桶名称必须:
后缀将自动添加到您使用控制台创建目录存储桶时提供的基本名称中。此后缀包括您选择的可用区的可用区 ID。
创建存储桶后,便无法更改其名称。有关给存储桶命名的更多信息,请参阅存储桶命名规则。
请勿在桶名称中包含敏感信息,如账号。存储桶名称会显示在指向存储桶中的对象的 URL 中。
-
在对象所有权下,将自动启用强制桶拥有者设置,并禁用所有访问控制列表(ACL)。对于目录存储桶,无法启用 ACL。
-
在此桶的屏蔽公共访问权限设置下,目录桶的所有屏蔽公共访问权限设置已自动启用。无法修改目录桶的这些设置。有关阻止公共访问的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问。
-
在服务器端加密设置下,Amazon S3 应用采用 Amazon S3 托管式密钥的服务器端加密(SSE-S3),作为对所有 Amazon S3 存储桶的基本加密级别。上传到目录桶的所有对象都使用 SSE-S3 进行加密。对于目录桶,无法修改加密类型。有关 SSE-S3 的更多信息,请参阅使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)。
-
请选择创建存储桶。
创建存储桶后,您可以向存储桶中添加文件和文件夹。有关更多信息,请参阅 使用目录桶中的对象。
- SDK for Go
-
此示例说明如何使用 Amazon SDK for Go 创建目录桶。
var bucket = "..."
func runCreateBucket(c *s3.Client) {
resp, err := c.CreateBucket(context.Background(), &s3.CreateBucketInput{
Bucket: &bucket,
CreateBucketConfiguration: &types.CreateBucketConfiguration{
Location: &types.LocationInfo{
Name: aws.String("usw2-az1
"),
Type: types.LocationTypeAvailabilityZone,
},
Bucket: &types.BucketInfo{
DataRedundancy: types.DataRedundancySingleAvailabilityZone,
Type: types.BucketTypeDirectory,
},
},
})
var terr *types.BucketAlreadyOwnedByYou
if errors.As(err, &terr) {
fmt.Printf("BucketAlreadyOwnedByYou: %s\n", aws.ToString(terr.Message))
fmt.Printf("noop...\n")
return
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("bucket created at %s\n", aws.ToString(resp.Location))
}
- SDK for Java 2.x
-
此示例说明如何使用 Amazon SDK for Java 2.x 创建目录桶。
public static void createBucket(S3Client s3Client, String bucketName) {
//Bucket name format is {base-bucket-name}--{az-id}--x-s3
//example: doc-example-bucket
--usw2-az1
--x-s3 is a valid name for a directory bucket created in
//Region us-west-2, Availability Zone 2
CreateBucketConfiguration bucketConfiguration = CreateBucketConfiguration.builder()
.location(LocationInfo.builder()
.type(LocationType.AVAILABILITY_ZONE)
.name("usw2-az1
").build()) //this must match the Region and Availability Zone in your bucket name
.bucket(BucketInfo.builder()
.type(BucketType.DIRECTORY)
.dataRedundancy(DataRedundancy.SINGLE_AVAILABILITY_ZONE)
.build()).build();
try {
CreateBucketRequest bucketRequest = CreateBucketRequest.builder().bucket(bucketName).createBucketConfiguration(bucketConfiguration).build();
CreateBucketResponse response = s3Client.createBucket(bucketRequest);
System.out.println(response);
}
catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
- Amazon SDK for JavaScript
-
此示例说明如何使用 Amazon SDK for JavaScript 创建目录桶。
// file.mjs, run with Node.js v16 or higher
// To use with the preview build, place this in a folder
// inside the preview build directory, such as /aws-sdk-js-v3/workspace/
import { S3 } from "@aws-sdk/client-s3";
const region = "us-east-1
";
const zone = "use1-az4
";
const suffix = `${zone}--x-s3`;
const s3 = new S3({ region });
const bucketName = `...--${suffix}`;
const createResponse = await s3.createBucket(
{ Bucket: bucketName,
CreateBucketConfiguration: {Location: {Type: "AvailabilityZone", Name: zone},
Bucket: { Type: "Directory", DataRedundancy: "SingleAvailabilityZone" }}
}
);
- Amazon SDK for .NET
-
此示例说明如何使用 Amazon SDK for .NET 创建目录桶。
using (var amazonS3Client = new AmazonS3Client())
{
var putBucketResponse = await amazonS3Client.PutBucketAsync(new PutBucketRequest
{
BucketName = "DOC-EXAMPLE-BUCKET
--usw2-az1
--x-s3",
PutBucketConfiguration = new PutBucketConfiguration
{
BucketInfo = new BucketInfo { DataRedundancy = DataRedundancy.SingleAvailabilityZone, Type = BucketType.Directory },
Location = new LocationInfo { Name = "usw2-az1
", Type = LocationType.AvailabilityZone }
}
}).ConfigureAwait(false);
}
- SDK for PHP
-
此示例说明如何使用 Amazon SDK for PHP 创建目录桶。
require 'vendor/autoload.php';
$s3Client = new S3Client([
'region' => 'us-east-1
',
]);
$result = $s3Client->createBucket([
'Bucket' => 'doc-example-bucket
--use1-az4
--x-s3',
'CreateBucketConfiguration' => [
'Location' => ['Name'=> 'use1-az4
', 'Type'=> 'AvailabilityZone'],
'Bucket' => ["DataRedundancy" => "SingleAvailabilityZone" ,"Type" => "Directory"] ],
]);
- SDK for Python
-
此示例说明如何使用 Amazon SDK for Python (Boto3) 创建目录桶。
import logging
import boto3
from botocore.exceptions import ClientError
def create_bucket(s3_client, bucket_name, availability_zone):
'''
Create a directory bucket in a specified Availability Zone
:param s3_client: boto3 S3 client
:param bucket_name: Bucket to create; for example, 'doc-example-bucket
--usw2-az1
--x-s3'
:param availability_zone: String; Availability Zone ID to create the bucket in, for example, 'usw2-az1'
:return: True if bucket is created, else False
'''
try:
bucket_config = {
'Location': {
'Type': 'AvailabilityZone',
'Name': availability_zone
},
'Bucket': {
'Type': 'Directory',
'DataRedundancy': 'SingleAvailabilityZone'
}
}
s3_client.create_bucket(
Bucket = bucket_name,
CreateBucketConfiguration = bucket_config
)
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == '__main__':
bucket_name = 'BUCKET_NAME
'
region = 'us-west-2
'
availability_zone = 'usw2-az1
'
s3_client = boto3.client('s3', region_name = region)
create_bucket(s3_client, bucket_name, availability_zone)
- SDK for Ruby
-
此示例说明如何使用 Amazon SDK for Ruby 创建目录桶。
s3 = Aws::S3::Client.new(region:'us-west-2
')
s3.create_bucket(
bucket: "bucket_base_name--az_id--x-s3",
create_bucket_configuration: {
location: { name: 'usw2-az1
', type: 'AvailabilityZone' },
bucket: { data_redundancy: 'SingleAvailabilityZone', type: 'Directory' }
}
)
此示例说明如何使用 Amazon CLI 创建目录桶。要使用该命令,请将用户输入占位符
替换为您自己的信息。
创建目录存储桶时,必须提供配置详细信息并使用以下命名约定:bucket-base-name
--azid
--x-s3
aws s3api create-bucket
--bucket bucket-base-name
--azid
--x-s3
--create-bucket-configuration 'Location={Type=AvailabilityZone,Name=usw2-az1
},Bucket={DataRedundancy=SingleAvailabilityZone,Type=Directory}'
--region us-west-2
有关更多信息,请参阅 Amazon Command Line Interface 中的 create-bucket。