Backstage Functions
Backstage Functions is an Open Source Serverless Plataform able to store and execute JavaScript code.
Run local via Docker
Requirements
- Docker 1.12+
- Docker compose 1.8+
Download docker-compose.yml
mkdir functions
cd functions
curl 'https://raw.githubusercontent.com/backstage/functions/master/docker-compose.yml' > docker-compose.yml
Run
docker-compose up
Run local without Docker
Requirements
- Redis 3.0+
- NodeJS 6.6.0
Download the project
git clone https://github.com/backstage/functions.git
cd functions
Setup
make setup
Run
make run
How to use
Create function
function main(req, res) {
const name = (req.body && req.body.name) || "World"
res.send({ say: `Hello ${name}!` })
}
Send the function as curl to /functions/:namespace/:name
curl -i -XPUT http://localhost:8100/functions/example/hello-world \
-H 'content-type: application/json' \
-d '{"code":"function main(req, res) {\n const name = (req.body && req.body.name) || \"World\"\n res.send({ say: `Hello ${name}!` })\n}\n"}'
Run the function send a PUT
request to /functions/:namespace/:name/run
:
curl -i -H 'content-type: application/json' -XPUT http://localhost:8100/functions/example/hello-world/run
Results in something like:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 22
ETag: W/"16-soBGetwJPBLt8CqWpBQu+A"
Date: Tue, 11 Oct 2016 16:51:04 GMT
Connection: keep-alive
{"say":"Hello World!"}
If one pass an object at the request payload with name the payload is executed
curl -i -XPUT http://localhost:8100/functions/example/hello-world/run \
-H 'content-type: application/json' \
-d '{"name": "Pedro"}'
Results in something like:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 22
ETag: W/"16-Ino2/umXaZ3xVEhoqyS8aA"
Date: Tue, 11 Oct 2016 17:13:11 GMT
Connection: keep-alive
{"say":"Hello Pedro!"}