Serverless S3 Deploy

Plugin for serverless to deploy files to a variety of S3 Buckets

GitHub
View on Github

Serverless S3 Deploy

Plugin for serverless to deploy files to a variety of S3 Buckets

# serverless-s3-deploy Plugin for serverless to deploy files to a variety of S3 Buckets > **Note: This project is currently not maintained.** # Installation ``` npm install --save-dev serverless-s3-deploy ``` # Usage Add to your serverless.yml: ``` plugins: - serverless-s3-deploy custom: assets: targets: - bucket: my-bucket files: - source: ../assets/ globs: '**/*.css' - source: ../app/ globs: - '**/*.js' - '**/*.map' - bucket: my-other-bucket empty: true prefix: subdir files: - source: ../email-templates/ globs: '**/*.html' ``` You can specify any number of `target`s that you want. Each `target` has a `bucket` and a `prefix`. `bucket` is either the name of your S3 bucket or a reference to a CloudFormation resources created in the same serverless configuration file. See below for additional details. You can specify `source` relative to the current directory. Each `source` has its own list of `globs`, which can be either a single glob, or a list of globs. Setting `empty` to `true` will delete all files inside the bucket before uploading the new content to S3 bucket. The `prefix` value is respected and files outside will not be deleted. Now you can upload all of these assets to your bucket by running: ``` $ sls s3deploy ``` If you have defined multiple buckets, you can limit your deployment to a single bucket with the `--bucket` option: ``` $ sls s3deploy --bucket my-bucket ``` ## ACL You can optionally specificy an ACL for the files uploaded on a per target basis: ``` custom: assets: targets: - bucket: my-bucket acl: private files: ``` The default value is `private`. Options are defined [here](http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl). ## Content Type The appropriate Content Type for each file will attempt to be determined using ``mime-types``. If one can't be determined, a default fallback of 'application/octet-stream' will be used. You can override this fallback per-source by setting ``defaultContentType``. ``` custom: assets: targets: - bucket: my-bucket files: - source: html/ defaultContentType: text/html ... ``` ## Other Headers Additional headers can be included per target by providing a ``headers`` object. See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html for more details. ``` custom: assets: targets: - bucket: my-bucket files: - source: html/ headers: CacheControl: max-age=31104000 # 1 year ``` ## Resolving References A common use case is to create the S3 buckets in the `resources` section of your serverless configuration and then reference it in your S3 plugin settings: ``` custom: assets: targets: - bucket: Ref: MyBucket files: - source: html/ resources: # AWS CloudFormation Template Resources: MyBucket: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead WebsiteConfiguration: IndexDocument: index.html ErrorDocument: index.html ``` You can disable the resolving with the following flag: ``` custom: assets: resolveReferences: false ``` ## Auto-deploy If you want s3deploy to run automatically after a deploy, set the `auto` flag: ``` custom: assets: auto: true ``` ## IAM Configuration You're going to need an IAM policy that supports this deployment. This might be a good starting point: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${bucket}" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::${bucket}/*" ] } ] } ``` ## Upload concurrency If you want to tweak the upload concurrency, change `uploadConcurrency` config: ``` config: assets: # defaults to 3 uploadConcurrency: 1 ``` ## Verbosity Verbosity cloud be enabled using either of these methods: Configuration: ``` custom: assets: verbose: true ``` Cli: ``` sls s3deploy -v ```