

# 在 Amazon S3 上构建应用程序的常见通用存储桶模式
<a name="common-bucket-patterns"></a>

在 Amazon S3 上构建应用程序时，您可以使用唯一的通用存储桶来分隔不同的数据集或工作负载。当您构建为最终用户或不同用户组服务的应用程序时，请使用我们的最佳实践设计模式来构建能够充分利用 Amazon S3 功能和可扩展性的应用程序。

**重要**  
我们建议您创建不可预测的通用存储桶名称。除非您已经创建了存储桶，否则不要编写假定您所选存储桶名称可用的代码。我们建议在您的账户区域命名空间中创建存储桶，以确保只有您的账户才能拥有这些存储桶名称，请参阅[通用存储桶的命名空间](gpbucketnamespaces.md)。有关通用存储桶命名规则的更多信息，请参阅[通用存储桶命名规则](bucketnamingrules.md)。

**Topics**
+ [多租户通用存储桶模式](#multi-tenant-buckets)
+ [按用途划分的存储桶模式](#bucket-per-customer)

## 多租户通用存储桶模式
<a name="multi-tenant-buckets"></a>

使用多租户存储桶，您可以为团队或工作负载创建单个通用存储桶。您可以使用[唯一的 S3 前缀](using-prefixes.md)来组织存储在存储桶中的对象。前缀是对象键名称开头的一串字符串。前缀可以是任意长度，取决于对象键名称的最大长度（1024 个字节）。您可以把前缀视为一种以类似于目录的方式组织数据的方式。但是，前缀不是目录。

例如，要存储关于城市的信息，您可以按大陆、按国家/区域，然后按省份或州来进行组织。因为这些名称通常不包含标点符号，您可以使用斜杠 (/) 作为分隔符。以下示例展示了如何使用斜杠（/）作为分隔符，通过大陆、国家/地区，然后是省份或州来组织城市名称的前缀。
+ Europe/France/NouvelleA-Aquitaine/Bordeaux
+ North America/Canada/Quebec/Montreal
+ North America/USA/Washington/Bellevue
+ North America/USA/Washington/Seattle

当通用存储桶内有数百个唯一的数据集时，这种模式可以很好地扩展。使用前缀，您可以轻松地对这些数据集进行组织和分组。

但是，多租户通用存储桶模式的一个潜在缺点是，许多 S3 存储桶级别的功能（例如[默认存储桶加密](bucket-encryption.md)、[S3 版本控制](versioning-workflows.md)和 [S3 申请方付款](RequesterPaysBuckets.md)）是在存储桶级别而不是在前缀级别设置的。如果多租户存储桶中的不同数据集具有独特的要求，而您无法在前缀级别配置许多 S3 存储桶级别功能，那么您可能很难为每个数据集指定正确的设置。此外，在多租户存储桶中，当您试图了解与特定前缀相关的存储、请求和数据传输时，[成本分配](BucketBilling.md)可能会变得复杂。

## 按用途划分的存储桶模式
<a name="bucket-per-customer"></a>

使用按用途划分的存储桶模式，您可以为每个不同的数据集、最终用户或团队创建一个通用存储桶。由于您可以为每个存储桶配置 S3 存储桶级别的功能，因此您可以使用此模式来配置唯一的存储桶级别设置。例如，您可以按照针对每个存储桶中的数据集自定义的方式，来配置[默认存储桶加密](bucket-encryption.md)、[S3 版本控制](versioning-workflows.md)和 [S3 申请方付款](RequesterPaysBuckets.md)等功能。为每个不同的数据集、最终用户或团队使用一个存储桶，还有助于简化访问管理和成本分配策略。

这种策略的一个潜在缺点是，您可能需要管理数千个存储桶。所有 Amazon Web Services 账户的默认配额均为 10000 个通用存储桶。可以通过提交增加配额请求来增加账户的存储桶配额。要请求提高通用存储桶的配额，请访问[服务配额控制台](https://console.amazonaws.cn/servicequotas/home/services/s3/quotas/)。

要管理您的按用途划分的存储桶模式，并简化您的基础设施管理，可以使用 [Amazon CloudFormation](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html#welcome-simplify-infrastructure-management)。您可以为您的模式创建自定义 Amazon CloudFormation 模板，该模板已经定义了 S3 通用存储桶所需的所有设置，以便您可以轻松部署和跟踪对基础设施的任何更改。有关更多信息，请参阅《Amazon CloudFormation User Guide》**中的 [AWS::S3::Bucket](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html)。

![\[此图表展示了如何为您的应用程序创建一个自定义的 Amazon CloudFormation 模板，该模板定义了您的 S3 存储桶的设置。\]](http://docs.amazonaws.cn/AmazonS3/latest/userguide/images/create-stack-diagram.png)


在通过存储桶按用量模式构建工作负载时，我们建议您在账户区域命名空间中创建存储桶。通过在您的账户区域命名空间中创建存储桶，您可以避免与他人争夺存储桶名称，并且可以确保只有您的账户才能按照您选择的命名约定创建存储桶。有关账户区域命名空间的更多信息，请参阅[通用存储桶的命名空间](gpbucketnamespaces.md)。