

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建、列出和删除存储桶
<a name="examples-s3-buckets"></a>

Amazon Simple Storage Service（Amazon S3）中的每个对象**或文件都包含在一个**存储桶中，该存储桶代表一个对象文件夹。每个存储桶都有一个在 AWS 内全局唯一的名称。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[使用 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html)。

## 先决条件
<a name="codeExamplePrereq"></a>

在开始之前，建议您先阅读[开始使用适用于 C\$1\$1 的 AWS SDK](getting-started.md)。

下载示例代码并按[代码示例入门](getting-started-code-examples.md)中所述构建解决方案。

要运行这些示例，您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限（用于服务和操作）。有关更多信息，请参阅[提供 AWS 凭证](credentials.md)。

## 列出存储桶
<a name="list-buckets"></a>

要运行 `list_buckets` 示例，请在命令提示符下，导航至构建系统生成可执行文件的文件夹。运行可执行文件，例如 `run_list_buckets`（完整的可执行文件名因操作系统而异）。输出会列出您账户的存储桶（如果有），如果您没有任何存储桶，则会显示一个空列表。

`list_buckets.cpp` 中有两种方法：
+ `main()` 调用 `ListBuckets()`。
+ `ListBuckets()` 使用 SDK 查询您的存储桶。

`S3Client` 对象会调用 SDK 的 `ListBuckets()` 方法。如果成功，该方法将返回一个包含 `ListBucketResult` 对象的 `ListBucketOutcome` 对象。`ListBucketResult` 对象会调用 `GetBuckets()` 方法以获取包含您账户中每个 Amazon S3 存储桶信息的 `Bucket` 对象列表。

 **代码** 

```
bool AwsDoc::S3::listBuckets(const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    auto outcome = client.ListBuckets();

    bool result = true;
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed with error: " << outcome.GetError() << std::endl;
        result = false;
    } else {
        std::cout << "Found " << outcome.GetResult().GetBuckets().size() << " buckets\n";
        for (auto &&b: outcome.GetResult().GetBuckets()) {
            std::cout << b.GetName() << std::endl;
        }
    }

    return result;
}
```

请参阅 Github 上的完整 [list\$1buckets 示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/list_buckets.cpp)。

## 创建存储桶
<a name="create-bucket"></a>



要运行 `create_bucket` 示例，请在命令提示符下，导航至构建系统生成可执行文件的文件夹。运行可执行文件，例如 `run_create_bucket`（完整的可执行文件名因操作系统而异）。该代码会在您的账户下创建一个空存储桶，然后显示请求成功还是失败。

`create_bucket.cpp` 中有两种方法：
+ `main()` 调用 `CreateBucket()`。在 `main()` 中，您需要使用 `enum` 将 AWS 区域 更改为账户所在区域。您可以登录[AWS 管理控制台](https://console.aws.amazon.com/)查看账户所在区域，然后在右上角找到该区域。
+ `CreateBucket()` 使用 SDK 创建存储桶。



`S3Client` 对象调用 SDK 的 `CreateBucket()` 方法，传入带有存储桶名称的 `CreateBucketRequest`。默认情况下，存储桶在 *us-east-1*（弗吉尼亚州北部）区域创建。如果您的区域不是 *us-east-1*，则代码会设置存储桶约束，以确保在您所在地区创建存储桶。

 **代码** 

```
bool AwsDoc::S3::createBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);
    Aws::S3::Model::CreateBucketRequest request;
    request.SetBucket(bucketName);

    if (clientConfig.region != "us-east-1") {
        Aws::S3::Model::CreateBucketConfiguration createBucketConfig;
        createBucketConfig.SetLocationConstraint(
                Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName(
                        clientConfig.region));
        request.SetCreateBucketConfiguration(createBucketConfig);
    }

    Aws::S3::Model::CreateBucketOutcome outcome = client.CreateBucket(request);
    if (!outcome.IsSuccess()) {
        auto err = outcome.GetError();
        std::cerr << "Error: createBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Created bucket " << bucketName <<
                  " in the specified AWS Region." << std::endl;
    }

    return outcome.IsSuccess();
}
```

请参阅 Github 上的完整 [create\$1buckets 示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/create_bucket.cpp)。

## 删除存储桶
<a name="delete-bucket"></a>



要运行 `delete_bucket` 示例，请在命令提示符下，导航至构建系统生成可执行文件的文件夹。运行可执行文件，例如 `run_delete_bucket`（完整的可执行文件名因操作系统而异）。此代码会删除您账户中指定的存储桶，然后显示请求成功还是失败。

在 `delete_bucket.cpp` 中，有两种方法。
+ `main()` 调用 `DeleteBucket()`。在 `main()` 中，您需要使用 `enum` 将 AWS 区域 更改为账户所在区域。您还需要将 `bucket_name` 更改为要删除的存储桶的名称。
+ `DeleteBucket()` 使用 SDK 删除存储桶。



`S3Client` 对象使用 SDK 的 `DeleteBucket()` 方法，并传入一个带有要删除的存储桶名称的 `DeleteBucketRequest` 对象。存储桶必须为空才能成功。

 **代码**

```
bool AwsDoc::S3::deleteBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {

    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::DeleteBucketRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::DeleteBucketOutcome outcome =
            client.DeleteBucket(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: deleteBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "The bucket was deleted" << std::endl;
    }

    return outcome.IsSuccess();
}
```

请参阅 Github 上的完整 [delete\$1bucket 示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/delete_bucket.cpp)。