Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kubek2k/lambdoku
Heroku-like experience when using AWS Lambda
https://github.com/kubek2k/lambdoku
Last synced: 4 days ago
JSON representation
Heroku-like experience when using AWS Lambda
- Host: GitHub
- URL: https://github.com/kubek2k/lambdoku
- Owner: kubek2k
- Created: 2016-11-26T21:55:52.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-09-29T16:02:37.000Z (about 5 years ago)
- Last Synced: 2024-08-01T22:47:01.597Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 58.6 KB
- Stars: 568
- Watchers: 9
- Forks: 18
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-serverless - Lambdoku - Heroku-like experience when using AWS Lambda. (Frameworks)
README
# Lambdoku
Heroku-like experience with AWS Lambdas.
## Features
### Connecting current directory with lambda (like `heroku git:remote`)
```shell
$ lambdoku init
```this allows you to omit the `-a` param for all commands below
### Simple push of the zip/jar file
```
$ lambdoku push hello.zip
```### Simplified environment variables management (`heroku config`)
```shell
$ lambdoku config:set ONE=1 TWO=2$ lambdoku config
ONE='1'
TWO='2'$ lambdoku config:get ONE
ONE='1'
```### Simplified releases management (`heroku releases`)
```shell
$ lambdoku releases
22 | Setting env variables AA | 2016-11-26T21:12:46.894+0000
21 | Unsetting env variables XY | 2016-11-26T21:10:04.302+0000
20 | Setting env variables BB,XY | 2016-11-26T20:57:57.340+0000
...$ lambdoku rollback 18
$ lambdoku releases
23 | Rolling back to version 18 | 2016-11-26T21:35:45.952+0000
22 | Setting env variables AA | 2016-11-26T21:12:46.894+0000
21 | Unsetting env variables XY | 2016-11-26T21:10:04.302+0000
20 | Setting env variables BB,XY | 2016-11-26T20:57:57.340+0000
...
```in the example :point_up: both code and configuration is rolled back from version 18.
### Pipelines (`heroku pipelines`)
(actually the main reason why lambdoku was created)
```shell
$ lambdoku init lambdaDev$ lambdoku pipeline:add lambdaStage
$ lambdoku pipeline:add lambdaProd -a lambdaStage
$ lambdoku pipeline
lambdaStage$ lambdoku pipeline:promote
```now `lambdaDev` and `lambdaStage` have the same codebase.
`lambdaStage` can be promoted to `lambdaProd` with command `lambdoku downstream:promote -a lambdaStage`.### Logs
To get 100 latest log lines from all lambda invocations:
```shell
$ lambdoku logs -n 100
```To follow logs produced by all lambda invocations:
```shell
$ lambdoku logs -f
```### Invoking lambda
To invoke lambda to test if it works, you can use:
```shell
lambdoku invoke
```You can also pass parameters to the function invocation:
```shell
lambdoku invoke '{"param1": "value1" ... }'
```## Installation
1. _Prerequisite:_ AWS Environment variables
* Set required variables:
* `AWS_ACCESS_KEY_ID`
* `AWS_SECRET_ACCESS_KEY`
* `AWS_DEFAULT_REGION`
* ... or use the `~/.aws/config` file to configure aws-sdk by setting `AWS_SDK_LOAD_CONFIG` env variable to something truthy
2. _Prerequisite:_ Node and npm _(ES6 support required)_
* On OS X with homebrew: `brew update && brew install node`
3. Then, simply:```shell
npm install -g lambdoku
```## Internals (aka 'how it works?')
* it's simply an abstraction layer over AWS Lambda API effectively invoking `aws-sdk`
* each change applied to lambda is finished with lambda version publication
* the `rollback` and `promote` operations retrieve code from AWS and uploads it in place of current one
* pipelines use special env variable (please :pray: don't use it :)) `DOWNSTREAM_LAMBDAS` to the dowstreams## Known issues
Due to the nature of AWS Lambda API most of the operations can't be considered atomic, like:
* the change in configuration has to first retrieve current configuration - which may be change in the meantime
* the rollback can be infected with change done in configuration in the 'meantime'
* the pipelines promote can be infected by changes done at the same time on downstream