

# 启用和使用 S3 Transfer Acceleration
启用 Transfer Acceleration

可以使用 Amazon S3 Transfer Acceleration 在客户端和 S3 通用存储桶之间进行快速、安全的远距离文件传输。您可以使用 S3 控制台、Amazon Command Line Interface（Amazon CLI）、API 或 Amazon SDK 启用 Transfer Acceleration。

本节提供了有关如何对存储桶启用 Amazon S3 Transfer Acceleration 和对启用的存储桶使用加速端点的示例。

有关 Transfer Acceleration 要求的更多信息，请参阅[使用 Amazon S3 Transfer Acceleration 配置快速、安全的文件传输](transfer-acceleration.md)。

## 使用 S3 控制台


**注意**  
如果要比较加快的上传速度与未加快的上传速度，请打开 [Amazon S3 Transfer Acceleration 速度比较工具](https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html)。  
此速度比较工具使用分段上传来将文件从浏览器传输到各种使用和未使用 Amazon S3 Transfer Acceleration 的 Amazon Web Services 区域。您可以比较直接上传和按区域传输加速上传的上传速度。

**为 S3 通用存储桶启用传输加速**

1. 登录到 Amazon Web Services 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在**通用存储桶**列表中，选择要为其启用加速传输的存储桶的名称。

1. 选择**属性**。

1. 在 **Transfer acceleration (传输加速)** 下，选择 **Edit (编辑)**。

1. 选择 **Enable（启用）**，然后选择 **Save changes（保存更改）**。

**要访问加速数据传输**

1. 在 Amazon S3 为您的存储桶启用传输加速后，查看存储桶的 **Properties**（属性）选项卡。

1. 在 **Transfer acceleration（传输加速）**下，**Accelerated endpoint（加速端点）**显示存储桶的传输加速端点。使用此端点访问与存储桶之间的加速数据传输。

   如果您暂停传输加速，加速端点不再起作用。

## 使用 Amazon CLI


以下是用于 Transfer Acceleration 的 Amazon CLI 命令的示例。有关设置 Amazon CLI 的说明，请参阅《Amazon S3 API Reference》**中的 [Developing with Amazon S3 using the Amazon CLI](https://docs.amazonaws.cn/AmazonS3/latest/API/setup-aws-cli.html)。

### 在存储桶上启用 Transfer Acceleration


使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/s3api/put-bucket-accelerate-configuration.html](https://docs.amazonaws.cn/cli/latest/reference/s3api/put-bucket-accelerate-configuration.html) 命令对存储桶启用或暂停 Transfer Acceleration。

以下示例设置 `Status=Enabled`，以便对名为 `amzn-s3-demo-bucket` 的存储桶启用 Transfer Acceleration。要暂停 Transfer Acceleration，请使用 `Status=Suspended`。

**Example**  

```
$ aws s3api put-bucket-accelerate-configuration --bucket amzn-s3-demo-bucket --accelerate-configuration Status=Enabled
```

### 使用 Transfer Acceleration


您可以将 `s3` 和 `s3api` Amazon CLI 命令发出的所有 Amazon S3 请求定向到加速端点：`s3-accelerate.amazonaws.com`。为此，请在 Amazon Config 文件的配置文件中将配置值 `use_accelerate_endpoint` 设置为 `true`。必须对存储桶启用 Transfer Acceleration 才能使用加速端点。

所有请求都使用存储桶寻址的虚拟风格发送：`amzn-s3-demo-bucket.s3-accelerate.amazonaws.com`。不会将任何 `ListBuckets`、`CreateBucket` 和 `DeleteBucket` 请求发送到加速端点，因为该端点不支持这些操作。

有关 `use_accelerate_endpoint` 的更多信息，请参阅《Amazon CLI 命令参考》**中的 [Amazon CLI S3 配置](https://docs.amazonaws.cn/cli/latest/topic/s3-config.html)。

以下示例在默认配置文件中将 `use_accelerate_endpoint` 设置为 `true`。

**Example**  

```
$ aws configure set default.s3.use_accelerate_endpoint true
```

如果您需要对某些 Amazon CLI 命令使用加速端点，但不对其他此类命令使用加速端点，则可使用以下两种方法中的任一方法：
+ 通过将 `--endpoint-url` 参数设置为 `https://s3-accelerate.amazonaws.com`，来对任何 `s3` 或 `s3api` 命令使用加速端点。
+ 在 Amazon Config 文件中设置单独的配置文件。例如，创建一个将 `use_accelerate_endpoint` 设置为 `true` 的配置文件和一个不设置 `use_accelerate_endpoint` 的配置文件。在运行一条命令时，根据是否需要使用加速端点来指定要使用的配置文件。

### 将对象上传到已启用 Transfer Acceleration 的存储桶


以下示例通过使用已配置为使用加速端点的默认配置文件，来将文件上传到已启用 Transfer Acceleration 的名为 `amzn-s3-demo-bucket` 的存储桶。

**Example**  

```
$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region
```

以下示例通过使用 `--endpoint-url` 参数指定加速端点来将文件上传到已启用 Transfer Acceleration 的存储桶。

**Example**  

```
$ aws configure set s3.addressing_style virtual
$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region --endpoint-url https://s3-accelerate.amazonaws.com
```

## 使用 Amazon 开发工具包


以下是使用 Transfer Acceleration 通过 Amazon SDK 将对象上传到 Amazon S3 的示例。Amazon SDK 支持的某些语言（例如 Java 和 .NET）使用加速端点客户端配置标志，这样一来，您便无需显式将 Transfer Acceleration 的端点设置为 `bucket-name.s3-accelerate.amazonaws.com`。

------
#### [ Java ]

要使用适用于 Java 的 Amazon SDK 通过加速端点将对象上传到 Amazon S3，您可以：
+ 创建配置为使用加速端点的 S3Client。客户端访问的所有存储桶都必须已启用 Transfer Acceleration。
+ 对指定的存储桶启用 Transfer Acceleration。仅当您指定的存储桶尚未启用 Transfer Acceleration 时，此步骤才是必需的。
+ 验证是否为指定的存储桶启用了传输加速。
+ 使用存储桶的加速端点将新对象上传到指定的存储桶。

有关使用 Transfer Acceleration 的更多信息，请参阅[开始使用 Amazon S3 Transfer Acceleration](transfer-acceleration-getting-started.md)。

以下代码示例说明如何使用适用于 Java 的 Amazon SDK 配置 Transfer Acceleration。

```
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.BucketAccelerateStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.AccelerateConfiguration;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.core.exception.SdkClientException;

public class TransferAcceleration {
    public static void main(String[] args) {
        Region clientRegion = Region.US_EAST_1;
        String bucketName = "*** Provide bucket name ***";
        String keyName = "*** Provide key name ***";

        try {
            // Create an Amazon S3 client that is configured to use the accelerate endpoint.
            S3Client s3Client = S3Client.builder()
                    .region(clientRegion)
                    .credentialsProvider(ProfileCredentialsProvider.create())
                    .accelerate(true)
                    .build();

            // Enable Transfer Acceleration for the specified bucket.
            s3Client.putBucketAccelerateConfiguration(
                    PutBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .accelerateConfiguration(AccelerateConfiguration.builder()
                                    .status(BucketAccelerateStatus.ENABLED)
                                    .build())
                            .build());

            // Verify that transfer acceleration is enabled for the bucket.
            String accelerateStatus = s3Client.getBucketAccelerateConfiguration(
                    GetBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .build())
                    .status().toString();
            System.out.println("Bucket accelerate status: " + accelerateStatus);

            // Upload a new object using the accelerate endpoint.
            s3Client.putObject(PutObjectRequest.builder()
                            .bucket(bucketName)
                            .key(keyName)
                            .build(),
                    RequestBody.fromString("Test object for transfer acceleration"));
            System.out.println("Object \"" + keyName + "\" uploaded with transfer acceleration.");
        } catch (S3Exception e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it 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 ]

以下示例说明如何使用 适用于 .NET 的 Amazon SDK 对存储桶启用 Transfer Acceleration。有关设置和运行代码示例的信息，请参阅《适用于 .NET 的 Amazon SDK 开发人员指南》**中的 [Getting Started with the 适用于 .NET 的 Amazon SDK](https://docs.amazonaws.cn/sdk-for-net/latest/developer-guide/net-dg-setup.html)。

**Example**  

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class TransferAccelerationTest
    {
        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);
            EnableAccelerationAsync().Wait();
        }

        static async Task EnableAccelerationAsync()
        {
                try
                {
                    var putRequest = new PutBucketAccelerateConfigurationRequest
                    {
                        BucketName = bucketName,
                        AccelerateConfiguration = new AccelerateConfiguration
                        {
                            Status = BucketAccelerateStatus.Enabled
                        }
                    };
                    await s3Client.PutBucketAccelerateConfigurationAsync(putRequest);

                    var getRequest = new GetBucketAccelerateConfigurationRequest
                    {
                        BucketName = bucketName
                    };
                    var response = await s3Client.GetBucketAccelerateConfigurationAsync(getRequest);

                    Console.WriteLine("Acceleration state = '{0}' ", response.Status);
                }
                catch (AmazonS3Exception amazonS3Exception)
                {
                    Console.WriteLine(
                        "Error occurred. Message:'{0}' when setting transfer acceleration",
                        amazonS3Exception.Message);
                }
        }
    }
}
```

在将对象上传到启用了 Transfer Acceleration 的存储桶时，可指定在创建客户端时使用加速端点。



```
var client = new AmazonS3Client(new AmazonS3Config
            {
                RegionEndpoint = TestRegionEndpoint,
                UseAccelerateEndpoint = true
            }
```

------
#### [ JavaScript ]

有关使用适用于 JavaScript 的 Amazon SDK 启用 Transfer Acceleration 的示例，请参阅《适用于 JavaScript 的 Amazon SDK API Reference》**中的 [PutBucketAccelerateConfiguration command](https://docs.amazonaws.cn/AWSJavaScriptSDK/v3/latest/client/s3/command/PutBucketAccelerateConfigurationCommand/)。

------
#### [ Python（Boto） ]

有关通过使用适用于 Python 的 SDK 启用 Transfer Acceleration 的示例，请参阅《Amazon SDK for Python (Boto3) API Reference》**中的 [put\$1bucket\$1accelerate\$1configuration](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.put_bucket_accelerate_configuration)。

------
#### [ Other ]

有关使用其他 Amazon SDK 的信息，请参阅[示例代码和库](https://www.amazonaws.cn/code/)。

------

## 使用 REST API


使用 REST API `PutBucketAccelerateConfiguration` 操作在现有存储桶上启用加速配置。

有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html)。