Page updated Jan 16, 2024

Use transfer acceleration

When you use Transfer Acceleration, additional data transfer charges might apply. For more information about pricing, see Amazon S3 pricing.

You can enable Transfer Acceleration for fast and secure transfer of files over long distances between your end user device and the S3 bucket. You can override the storage resource for this configuration and then leverage the useAccelerateEndpoint parameter to use the accelerated S3 endpoint.

Override storage resource

Start by overriding your storage resources to enable Transfer Acceleration on your S3 bucket.

1$ amplify override storage
2✅ Successfully generated "override.ts" folder at <project>/amplify/backend/storage/accelerated-bucket
3✔ Do you want to edit override.ts file now? (Y/n) · yes
4Edit the file in your editor: <project>/amplify/backend/storage/accelerated-bucket/override.ts

In the generated override.ts file use the following CDK snippet to enable transfer acceleration.

1// amplify/backend/storage/accelerated-bucket/override.ts
2import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper';
3
4export function override(resources: AmplifyS3ResourceTemplate) {
5 resources.s3Bucket.accelerateConfiguration = {
6 accelerationStatus: 'Enabled'
7 }
8}

Next, deploy this storage resource:

1amplify push

Upload files using the accelerated S3 endpoint

We switch to the accelerated S3 endpoint by using the useAccelerateEndpoint parameter set to true in the AWSS3StorageUploadFileOptions.

1AWSS3StorageUploadFileOptions awsS3StorageUploadFileOptions =
2 AWSS3StorageUploadFileOptions.builder().setUseAccelerateEndpoint(true).build();
3 Amplify.Storage.uploadFile(
4 "KEY",
5 file
6 awsS3StorageUploadFileOptions,
7 result -> Log.i("MyAmplifyApp", "Successfully uploaded: " + result.getKey()),
8 storageFailure -> Log.e("MyAmplifyApp", "Upload failed", storageFailure)
9);
1val awsS3StorageUploadFileOptions = AWSS3StorageUploadFileOptions.builder().
2 setUseAccelerateEndpoint(true).
3 build()
4 Amplify.Storage.uploadFile(
5 "KEY",
6 file
7 awsS3StorageUploadFileOptions,
8 { Log.i("MyAmplifyApp", "Successfully uploaded: " + it.getKey()) },
9 { Log.e("MyAmplifyApp", "Upload failed", it) }
10)
1val awsS3StorageUploadFileOptions = AWSS3StorageUploadFileOptions.builder().
2 setUseAccelerateEndpoint(true).
3 build()
4val upload = Amplify.Storage.uploadFile("KEY", file, awsS3StorageUploadFileOptions)
5try {
6 val result = upload.result()
7 Log.i("MyAmplifyApp", "Successfully uploaded: ${result.key}")
8} catch (error: StorageException) {
9 Log.e("MyAmplifyApp", "Upload failed", error)
10}
11)
1AWSS3StorageUploadFileOptions awsS3StorageUploadFileOptions =
2 AWSS3StorageUploadFileOptions.builder().setUseAccelerateEndpoint(true).build();
3RxProgressAwareSingleOperation<StorageUploadFileResult> rxUploadOperation =
4 RxAmplify.Storage.uploadFile("KEY", file, awsS3StorageUploadFileOptions);
5rxUploadOperation
6 .observeResult()
7 .subscribe(
8 result -> Log.i("MyAmplifyApp", "Successfully uploaded: " + result.getKey()),
9 error -> Log.e("MyAmplifyApp", "Upload failed", error)
10 );
11);
Note: useAccelerateEndpoint flag is available in AWSS3StorageUploadFileOptions, AWSS3StorageUploadInputStreamOptions, AWSS3StorageDownloadFileOptions and AWSS3StorageGetPresignedUrlOptions