Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/acidjazz/aeonian

Continuous deployment assistance for S3 + CloudFront environments
https://github.com/acidjazz/aeonian

aeonian aws-sdk bucket circleci cloudfront git-flow ora

Last synced: 13 days ago
JSON representation

Continuous deployment assistance for S3 + CloudFront environments

Awesome Lists containing this project

README

        


Aeonian Logo

æonian







Continuous Deployment for your AWS S3 + CloudFront environments

> still in early development

[![npm version](https://badge.fury.io/js/aeonian.svg)](https://badge.fury.io/js/aeonian)
[![GitHub issues](https://img.shields.io/github/issues/acidjazz/aeonian.svg)](https://github.com/acidjazz/aeonian/issues)
[![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/acidjazz/aeonian/master/license)
[![CircleCI](https://img.shields.io/circleci/project/github/acidjazz/aeonian.svg)](https://circleci.com/gh/acidjazz/aeonian/)
[![Join the chat at https://gitter.im/aws-aeonian/Lobby](https://badges.gitter.im/aws-aeonian/Lobby.svg)](https://gitter.im/aws-aeonian/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

[![NPM](https://nodei.co/npm/aeonian.png)](https://nodei.co/npm/aeonian/)

I've built this to help supply a continuous delivery [git-flow](http://nvie.com/posts/a-successful-git-branching-model/) workflow hosted on an AWS serverless setup

### What does this do?
Running `.deploy('{environment}')` will do the following:
1. Create a new S3 bucket `{prefix}-{commit-hash}-{environment}` based on the current repo and config
2. Upload the contents of a local directory you specified as `localDir`
3. Configure the newly created bucket as a static website
4. Change the origin of the CloudFront ID associated to point to our new bucket's website URL
5. Initiate an invalidation on `*` making the Distribution pull the new bucket's content
6. Delete the previous bucket that was assigned as the origin as to not leave a trail of buckets

### Example
Let's say you have a script `operations/aeonian.js` with the following
```javascript
require('aeonian').config({
bucket: {
localDir: './dist/',
prefix: 'mysite-'
},
website: {
index: 'index.html',
error: 'error/index.html',
},
environments: {
staging: 'CLOUDFRONT_ID',
production: 'CLOUDFRONT_ID',
}
}).deploy(process.argv[2])
```
Running `node operations/aeonian.js staging` this would result in


Aeonian Demo

Which would deploy `./dist/` to your S3+CF `staging` environment

### Installation

* Install the aeonian package
`npm install aeonian` or `yarn add aeonian`
* Set the current environment variables to your AWS key and secret for the [AWS JS SDK](https://aws.amazon.com/sdk-for-node-js/)
* `AWS_ACCESS_KEY_ID`
* `AWS_SECRET_ACCESS_KEY`
* Other options on this step can be found [here](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html)

### CircleCI Integration
This is mostly why aeonian exists, to deploy based on commits. Based on the example above, lets say you have the above script `operations/aeonian.js` in your repo. you could then add the following to your `package.json`
```javascript
"scripts": {
...
"staging": "node operations/aeonian.js staging",
"production": "node operations/aeonian.js production",
...
},
```
After setting your AWS credentials on CircleCi, you could add something like this to your `circle.yml`
```yaml
deployment:
staging:
branch: staging
commands:
- npm run staging
production:
branch: master
commands:
- npm run production
```
* Any commit/PR merge to the `staging` branch would deploy the `staging` environment
* Any commit/PR merge to the `master` branch would deploy the `production` environment

### Nuxt.js Integration
The main reason I built aeonian is for my all of my [Nuxt.js](https://nuxtjs.org/) projects. I have the following commands in my `package.json` that I have CircleCI run based on environment

```javascript
"scripts": {
...
"production": "yarn generate; node operations/aeonian.js production",
"staging": "yarn generate; node operations/aeonian.js staging",
...
},

```