diff --git a/README.md b/README.md index bf50e6a..7d2d77e 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,24 @@ Enable server side encryption for the uploaded files. You can use `AES256` or `a --- +**transferAcceleration** + +_optional_, default `false` + +```yaml +custom: + client: + ... + transferAcceleration: false + ... +``` + +Enable or disable Transfer Acceleration on the bucket, set to `true` or `false`. + +[AWS Documentation](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) + +--- + **manageResources** _optional_, default `true` (the plugin does manage your resources by default) diff --git a/index.js b/index.js index d7205a0..34c4e62 100644 --- a/index.js +++ b/index.js @@ -129,6 +129,7 @@ class Client { redirectAllRequestsTo, keyPrefix, sse, + transferAcceleration, routingRules, manageResources, tags; @@ -154,6 +155,7 @@ class Client { bucketName = this.options.bucketName; keyPrefix = this.options.keyPrefix; sse = this.options.sse || null; + transferAcceleration = this.options.transferAcceleration || false; manageResources = this.options.manageResources; headerSpec = this.options.objectHeaders; orderSpec = this.options.uploadOrder; @@ -254,6 +256,14 @@ class Client { this.serverless.cli.log(`Configuring CORS for bucket...`); return configure.configureCorsForBucket(this.aws, bucketName); }) + .then(() => { + if (this.cliOptions['config-change'] === false || manageResources === false) { + this.serverless.cli.log(`Retaining existing bucket Transfer Acceleration configuration...`); + return Promise.resolve(); + } + this.serverless.cli.log(`Configuring Transfer Acceleration for bucket...`); + return configure.configureTransferAccelerationForBucket(this.aws, bucketName, transferAcceleration); + }) .then(() => { this.serverless.cli.log(`Uploading client files to bucket...`); return uploadDirectory( diff --git a/lib/configure.js b/lib/configure.js index 20562a2..78f74a8 100644 --- a/lib/configure.js +++ b/lib/configure.js @@ -144,9 +144,27 @@ function configureTagsForBucket(aws, bucketName, tags) { return aws.request('S3', 'putBucketTagging', params); } +/** + * Configures Transfer Acceleration for given bucket + * @param {Object} aws - AWS class + * @param {string} bucketName - Name of bucket to be configured + * @param {boolean} isAccelerated - if true, will enable transfer acceleration + */ +function configureTransferAccelerationForBucket(aws, bucketName, isAccelerated = false) { + const params = { + Bucket: bucketName, + AccelerateConfiguration: { + Status: isAccelerated ? 'Enabled' : 'Suspended' + } + }; + + return aws.request('S3', 'PutBucketAccelerateConfiguration', params); +} + module.exports = { configureBucket, configureCorsForBucket, configurePolicyForBucket, - configureTagsForBucket + configureTagsForBucket, + configureTransferAccelerationForBucket };