创建存储桶 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

创建存储桶

要向 Amazon S3 上传数据,您必须首先在其中一个 Amazon Web Services 区域 中创建 Amazon S3 存储桶。创建存储桶时,您必须选择存储桶名称和区域。您可以选择为存储桶选择其他存储管理选项。创建存储桶后,无法更改存储桶名称或区域。有关如何命名存储桶的信息,请参阅存储桶命名规则

创建存储桶的 Amazon Web Services 账户 拥有该存储桶。您可以将任何数量的对象上传到该存储桶。默认情况下,您可以在每个 Amazon Web Services 账户 中创建多达 100 个存储桶。如果您需要更多存储桶,则可以通过提交服务限制提高请求将账户的存储桶限制提高至最多 1,000 个存储桶。要了解如何提交存储桶限额提升,请参阅《Amazon 一般参考》中的 Amazon 服务配额。一个存储桶中可以存储任意数量的对象。

您可以使用 Amazon S3 控制台、Amazon S3 API、Amazon CLI 或 Amazon 开发工具包创建存储桶。

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

  2. 选择 Create bucket (创建存储桶)

    此时将打开 Create bucket (创建存储桶) 向导。

  3. Bucket name (存储桶名称) 中,输入符合 DNS 标准的存储桶名称。

    存储桶名称必须满足以下要求:

    • 在所有 Amazon S3 中是唯一的。

    • 长度必须介于 3 到 63 个字符之间。

    • 不包含大写字符。

    • 以小写字母或数字开头。

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

    重要

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

  4. 对于 Region (区域),选择要放置存储桶的 Amazon Web Services 区域 。

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

  5. Bucket settings for Block Public Access (阻止公有访问的存储桶设置) 中,选择要应用于存储桶的 Block Public Access (阻止公有访问) 设置。

    我们建议您将所有设置保持为启用状态,除非您知道您需要为您的使用案例关闭其中一个或多个设置,例如托管公共网站。您为存储桶启用的阻止公有访问设置也将为您在存储桶上创建的所有访问点启用。有关阻止公有访问的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问

  6. (可选)如果要启用 S3 对象锁定,请执行以下操作:

    1. 选择 Advanced settings (高级设置),然后阅读显示的消息。

      重要

      您只能在创建存储桶时为其启用 S3 对象锁定。如果您为存储桶启用了对象锁定,则以后无法禁用它。启用对象锁定还会启用存储桶的版本控制。为存储桶启用对象锁定后,必须先配置对象锁定设置,然后才能保护存储桶中的任何对象。有关配置对象保护的更多信息,请参阅使用 S3 对象锁定

    2. 如果要启用对象锁定,请在文本框中输入 enable 并选择 Confirm(确认)。

    有关 S3 对象锁定功能的更多信息,请参阅使用 S3 对象锁定

  7. 选择 Create bucket (创建存储桶)

使用 Amazon 开发工具包创建存储桶时,您必须先创建一个客户端,然后使用该客户端发送创建存储桶的请求。作为最佳做法,您应在同一 Amazon Web Services 区域 中创建客户端和存储桶。如果您在创建客户端或存储桶时未指定区域,Amazon S3 将使用默认区域美国东部(弗吉尼亚北部)。

要创建客户端来访问双堆栈终端节点,则必须指定 Amazon Web Services 区域 。有关更多信息,请参阅 双堆栈终端节点。有关可用 Amazon Web Services 区域 的列表,请参阅《Amazon 一般参考》中的区域和终端节点

创建客户端时,区域映射到特定于区域的终端节点。客户端使用此终端节点与 Amazon S3 进行通信:s3.<region>.amazonaws.com。如果您的区域是在 2019 年 3 月 20 日之后启动的,则您的客户端和存储桶必须位于同一区域。不过,您可以使用美国东部(弗吉尼亚北部)区域中的客户端在 2019 年 3 月 20 日之前启动的任何区域中创建存储桶。有关更多信息,请参阅 传统终端节点

这些 Amazon 开发工具包代码示例执行以下任务:

  • 通过明确指定 Amazon Web Services 区域 创建客户端 – 在本示例中,客户端使用 s3.us-west-2.amazonaws.com 终端节点与 Amazon S3 通信。您可以指定任意 Amazon Web Services 区域 。有关 Amazon Web Services 区域 的列表,请参阅《Amazon 一般参考》中的区域和终端节点

  • 通过仅指定存储桶名称来发送创建存储桶请求 — 客户端向 Amazon S3 发送请求,请求在您创建客户端的区域中创建存储桶。

  • 检索有关存储桶位置的信息 — Amazon S3 将存储桶位置信息存储在与存储桶关联的位置子资源中。

Java

此示例说明如何使用 Amazon SDK for Java 创建 Amazon S3 存储桶。有关创建和测试有效示例的说明,请参阅测试 Amazon S3 Java 代码示例

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CreateBucketRequest; import com.amazonaws.services.s3.model.GetBucketLocationRequest; import java.io.IOException; public class CreateBucket2 { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); if (!s3Client.doesBucketExistV2(bucketName)) { // Because the CreateBucketRequest object doesn't specify a region, the // bucket is created in the region specified in the client. s3Client.createBucket(new CreateBucketRequest(bucketName)); // Verify that the bucket was created by retrieving it and checking its location. String bucketLocation = s3Client.getBucketLocation(new GetBucketLocationRequest(bucketName)); System.out.println("Bucket location: " + bucketLocation); } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it and returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

有关如何创建和测试有效示例的信息,请参阅 运行 Amazon S3 .NET 代码示例

using Amazon; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Util; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CreateBucketTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); CreateBucketAsync().Wait(); } static async Task CreateBucketAsync() { try { if (!(await AmazonS3Util.DoesS3BucketExistAsync(s3Client, bucketName))) { var putBucketRequest = new PutBucketRequest { BucketName = bucketName, UseClientRegion = true }; PutBucketResponse putBucketResponse = await s3Client.PutBucketAsync(putBucketRequest); } // Retrieve the bucket location. string bucketLocation = await FindBucketLocationAsync(s3Client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } static async Task<string> FindBucketLocationAsync(IAmazonS3 client) { string bucketLocation; var request = new GetBucketLocationRequest() { BucketName = bucketName }; GetBucketLocationResponse response = await client.GetBucketLocationAsync(request); bucketLocation = response.Location.ToString(); return bucketLocation; } } }
Ruby

有关如何创建和测试有效示例的信息,请参阅 使用 Amazon SDK for Ruby - 版本 3

require 'aws-sdk-s3' # Creates a bucket in Amazon S3. # # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if the bucket was created; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-east-1') # exit 1 unless bucket_created?(s3_client, 'doc-example-bucket') def bucket_created?(s3_client, bucket_name) s3_client.create_bucket(bucket: bucket_name) rescue StandardError => e puts "Error while creating the bucket named '#{bucket_name}': #{e.message}" end

您也可以使用Amazon Command Line Interface (Amazon CLI) 创建 S3 存储桶。有关更多信息,请参阅《Amazon CLI 命令参考》中的 create-bucket

有关 Amazon CLI 的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的什么是 Amazon Command Line Interface?