启用和使用 S3 Transfer Acceleration - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

启用和使用 S3 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 配置快速、安全的文件传输

注意

如果要比较加快的上传速度与未加快的上传速度,请打开 Amazon S3 Transfer Acceleration 速度比较工具

此速度比较工具使用分段上传来将文件从浏览器传输到各种使用和未使用 Amazon S3 Transfer Acceleration 的 Amazon Web Services 区域。您可以比较直接上传和按区域传输加速上传的上传速度。

为 S3 存储桶启用传输加速
  1. 登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 存储桶列表中,选择要为其启用加速传输的存储桶的名称。

  3. 选择属性

  4. Transfer acceleration (传输加速) 下,选择 Edit (编辑)

  5. 选择 Enable(启用),然后选择 Save changes(保存更改)

要访问加速数据传输
  1. 在 Amazon S3 为您的存储桶启用传输加速后,查看存储桶的 Properties(属性)选项卡。

  2. Transfer acceleration(传输加速)下,Accelerated endpoint(加速端点)显示存储桶的传输加速端点。使用此端点访问与存储桶之间的加速数据传输。

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

以下是用于 Transfer Acceleration 的 Amazon CLI 命令的示例。有关设置 Amazon CLI 的说明,请参阅《Amazon S3 API 参考》中的 Developing with Amazon S3 using the Amazon CLI

在存储桶上启用 Transfer Acceleration

使用 Amazon CLI put-bucket-accelerate-configuration 命令对存储桶启用或暂停 Transfer Acceleration。

以下示例设置 Status=Enabled 以对存储桶启用 Transfer Acceleration。您用 Status=Suspended 来暂停 Transfer Acceleration。

$ aws s3api put-bucket-accelerate-configuration --bucket bucketname --accelerate-configuration Status=Enabled

使用 Transfer Acceleration

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

所有请求都使用存储桶寻址的虚拟风格发送:my-bucket.s3-accelerate.amazonaws.com。不会将任何 ListBucketsCreateBucketDeleteBucket 请求发送到加速端点,因为该端点不支持这些操作。

有关 use_accelerate_endpoint 的更多信息,请参阅《Amazon CLI 命令参考》中的 Amazon CLI S3 配置

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

$ 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 的存储桶。

$ aws s3 cp file.txt s3://bucketname/keyname --region region

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

$ aws configure set s3.addressing_style virtual $ aws s3 cp file.txt s3://bucketname/keyname --region region --endpoint-url https://s3-accelerate.amazonaws.com

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

Java

以下示例演示如何使用加速端点将对象上传到 Amazon S3。本示例执行以下操作:

  • 创建配置为使用加速端点的 AmazonS3Client。客户端访问的所有存储桶都必须已启用 Transfer Acceleration。

  • 对指定存储桶启用 Transfer Acceleration。仅当您指定的存储桶尚未启用 Transfer Acceleration 时,此步骤才是必需的。

  • 验证是否为指定存储桶启用了传输加速。

  • 使用存储桶的加速端点将新对象上传到指定存储桶。

有关使用 Transfer Acceleration 的更多信息,请参阅开始使用 Amazon S3 Transfer Acceleration。有关创建和测试有效示例的说明,请参阅《Amazon SDK for 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.BucketAccelerateConfiguration; import com.amazonaws.services.s3.model.BucketAccelerateStatus; import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest; public class TransferAcceleration { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ***"; try { // Create an Amazon S3 client that is configured to use the accelerate endpoint. AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .enableAccelerateMode() .build(); // Enable Transfer Acceleration for the specified bucket. s3Client.setBucketAccelerateConfiguration( new SetBucketAccelerateConfigurationRequest(bucketName, new BucketAccelerateConfiguration( BucketAccelerateStatus.Enabled))); // Verify that transfer acceleration is enabled for the bucket. String accelerateStatus = s3Client.getBucketAccelerateConfiguration( new GetBucketAccelerateConfigurationRequest(bucketName)) .getStatus(); System.out.println("Bucket accelerate status: " + accelerateStatus); // Upload a new object using the accelerate endpoint. s3Client.putObject(bucketName, keyName, "Test object for transfer acceleration"); System.out.println("Object \"" + keyName + "\" uploaded with transfer acceleration."); } catch (AmazonServiceException 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

以下示例说明如何使用 Amazon SDK for .NET 对存储桶启用 Transfer Acceleration。有关设置和运行代码示例的信息,请参阅《适用于 .NET 的 Amazon SDK 开发人员指南》中的适用于 .NET 的 Amazon SDK 入门

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 参考》中的调用 putBucketAccelerateConfiguration 操作

Python (Boto)

有关通过使用适用于 Python 的 SDK 启用 Transfer Acceleration 的示例,请参阅《Amazon SDK for Python(Boto3)API 参考》中的 put_bucket_accelerate_configuration

Other

有关使用其他 Amazon SDK 的信息,请参阅示例代码和库

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

有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 PutBucketAccelerateConfiguration