An open API service indexing awesome lists of open source software.

https://github.com/funkybob/serverless-s3-deploy

Plugin for serverless to deploy files to a S3 Bucket
https://github.com/funkybob/serverless-s3-deploy

Last synced: 11 months ago
JSON representation

Plugin for serverless to deploy files to a S3 Bucket

Awesome Lists containing this project

README

          

# 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
```