创建目录存储桶 - Amazon Simple Storage Service

创建目录存储桶

要开始使用 Amazon S3 Express One Zone 存储类,您需要创建一个目录存储桶。S3 Express One Zone 存储类只能用于目录存储桶。S3 Express One Zone 存储类支持低延迟使用案例,并在单个可用区内提供更快的数据处理速度。如果您的应用程序注重性能,并且受益于个位数毫秒的 PUTGET 延迟,我们建议您创建一个目录存储桶,以便可以使用 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)计算实例的本地 AWS 区域和可用区,以优化性能。

使用 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

有关目录存储桶命名规则的更多信息,请参阅目录存储桶命名规则

  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在页面顶部的导航栏中,选择当前所显示 AWS 区域的名称。接下来,选择要在其中创建存储桶的区域。

    注意

    要最大程度地减少延迟和成本以及满足法规要求,请选择一个靠近您的区域。在某一区域存储的对象将一直留在该区域,除非您特意将其转移到其他区域。有关 Amazon S3 AWS 区域的列表,请参阅《Amazon Web Services 一般参考》中的 AWS 服务 端点

  3. 在左侧导航窗格中,选择存储桶

  4. 选择创建存储桶

    此时将打开创建存储桶页面。

  5. 常规配置下,查看将在其中创建存储桶的 AWS 区域。

  6. 存储桶类型下,请选择目录

    注意
    • 如果您选择的区域不支持目录桶,则桶类型选项将消失,桶类型默认为通用桶。要创建目录桶,您必须选择受支持的区域。有关支持目录桶和 Amazon S3 Express One Zone 存储类的区域列表,请参阅S3 Express One Zone 可用区和区域

    • 在创建存储桶后,便无法更改存储桶类型。

    对于可用区,请选择计算服务本地的可用区。有关支持目录桶和 S3 Express One Zone 存储类的可用区列表,请参阅S3 Express One Zone 可用区和区域

    注意

    创建存储桶后无法更改可用区。

  7. 可用区下,选中复选框以确认在可用区中断时,您的数据可能不可用或丢失。

    重要

    尽管目录桶存储在单个可用区中的多个设备上,但目录桶不会跨可用区冗余存储数据。

  8. 对于存储桶名称,请输入目录存储桶的名称。

    目录存储桶名称必须:

    • 在选定的 AWS 区域和可用区内是唯一的。

    • 长度介于 3–63 个字符之间,包括后缀。

    • 仅包含小写字母、数字和连字符(-)。

    • 以字母或数字开头和结尾。

    • 必须包含以下后缀:--azid--x-s3

    后缀将自动添加到您使用控制台创建目录存储桶时提供的基本名称中。此后缀包括您选择的可用区的可用区 ID。

    创建存储桶后,便无法更改其名称。有关给存储桶命名的更多信息,请参阅存储桶命名规则

    重要

    请勿在桶名称中包含敏感信息,如账号。存储桶名称会显示在指向存储桶中的对象的 URL 中。

  9. 对象所有权下,将自动启用强制桶拥有者设置,并禁用所有访问控制列表(ACL)。对于目录存储桶,无法启用 ACL。

    已禁用 ACL
    • 强制存储桶拥有者(默认)– ACL 已禁用,存储桶拥有者自动拥有并完全控制存储桶中的每个对象。ACL 不再影响对 S3 存储桶中数据的访问权限。存储桶专门使用策略来定义访问控制。

      Amazon S3 中的大多数现代使用案例不再需要使用 ACL。有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。

  10. 此桶的屏蔽公共访问权限设置下,目录桶的所有屏蔽公共访问权限设置已自动启用。无法修改目录桶的这些设置。有关阻止公共访问的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问

  11. 服务器端加密设置下,Amazon S3 应用采用 Amazon S3 托管式密钥的服务器端加密(SSE-S3),作为对所有 Amazon S3 存储桶的基本加密级别。上传到目录桶的所有对象都使用 SSE-S3 进行加密。对于目录桶,无法修改加密类型。有关 SSE-S3 的更多信息,请参阅使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)

  12. 请选择创建存储桶

    创建存储桶后,您可以向存储桶中添加文件和文件夹。有关更多信息,请参阅 使用目录桶中的对象

SDK for Go

此示例说明如何使用 AWS 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

此示例说明如何使用 AWS 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); } }
AWS SDK for JavaScript

此示例说明如何使用 AWS 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" }} } );
AWS SDK for .NET

此示例说明如何使用 AWS 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

此示例说明如何使用 AWS 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

此示例说明如何使用 AWS 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

此示例说明如何使用 AWS 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' } } )

此示例说明如何使用 AWS 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

有关更多信息,请参阅 AWS Command Line Interface 中的 create-bucket