启用和使用 S3 Transfer Acceleration - Amazon Simple Storage Service

启用和使用 S3 Transfer Acceleration

您可以使用 Amazon S3 Transfer Acceleration 在您的客户端和 S3 存储桶之间进行快速、安全的远距离文件传输。您可以使用 S3 控制台、AWS 命令行界面 (AWS CLI) 或 AWS 开发工具包启用 Transfer Acceleration。

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

有关 Transfer Acceleration 要求的更多信息,请参阅使用 Amazon S3 Transfer Acceleration 配置快速、安全的文件传输

注意

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

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

为 S3 存储桶启用传输加速

  1. 登录 AWS 管理控制台,并通过以下网址打开 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 的 AWS CLI 命令的示例。有关设置 AWS CLI 的说明,请参阅使用 AWS CLI 进行 Amazon S3 开发

在存储桶上启用 Transfer Acceleration

使用 AWS 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 AWS CLI 命令发出的所有 Amazon S3 请求定向到加速终端节点:s3-accelerate.amazonaws.com。为此,请在 AWS Config 文件的配置文件中将配置值 use_accelerate_endpoint 设置为 true。必须对存储桶启用 Transfer Acceleration 才能使用加速终端节点。

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

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

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

$ aws configure set default.s3.use_accelerate_endpoint true

如果您需要对某些 AWS CLI 命令使用加速终端节点,但不对其他此类命令使用加速终端节点,则可使用以下两种方法中的任一方法:

  • 通过将 --endpoint-url 参数设置为 https://s3-accelerate.amazonaws.com 来对任何 s3 或 s3api 命令使用加速终端节点。

  • 在 AWS 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 通过 AWS 开发工具包将对象上传到 Amazon S3 的示例。一些 AWS 开发工具包支持的语言(例如,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 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.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

以下示例说明如何使用适用于 .NET 的 AWS 开发工具包对存储桶启用 Transfer Acceleration。有关如何创建和测试有效示例的说明,请参阅 运行 Amazon S3 .NET 代码示例

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 的 AWS 开发工具包来启用 Transfer Acceleration 的示例,请参阅《适用于 JavaScript 的 AWS 开发工具包 API 参考》中的调用 putBucketAccelerateConfiguration 操作

Python (Boto)

有关通过使用适用于 Python 的开发工具包启用 Transfer Acceleration 的示例,请参阅《适用于 Python 的 AWS 开发工具包 (Boto3) API 参考》中的 put_bucket_accelerate_configuration

Other

有关使用其他 AWS 开发工具包的信息,请参阅示例代码和库