μFaaS
golang micro FaaS framework
A minimal service to run container in a function as a service fashion. Easily embeddable and with a reasonably low resource consumption.
Installation
Currently only go get
is supported
go get github.com/muka/mufaas
Usage
- Start the daemon
mufaas daemon
- Point to a folder with a Dockerfile
cd $GOPATH/src/github.com/muka/mufaas
mufaas add --name node-example --type node ./examples/node
- Once built you can run the function
mufaas run node-example World
The API has ongoing support for stdin
as a io.Reader.
- Drop the function
mufaas remove node-example
Flags:
-v
enables debug logging
--url
set the daemon endpoint
Language support
Currently basic support is provided for those languages. See examples
directory for sample functions.
Adding language support
When calling mufaas add ./path
the default behavior is to lookup for a Dockerfile
in the provided path and build it.
If a Dockerfile is not available but the --type
flag is provided, mufaas will use a matching Dockerfile
placed in a shared directory on the filesystem (eg ~/.mufaas/templates/<type>/Dockerfile
) to create the function image.
Is up to the provided Dockerfile
implementation to run any dependency management tool and start the container with CMD
.
If other files or directories are in the same path of the Dockerfile also those will be copied in the container image.
Ensure to always provide a CMD
to be executed when running the function (ENTRYPOINT
is ignored).
For reference see ./templates/node/Dockerfile
Exec mode benchmark
- Create & run function container: 0.60s
- Run function container: 0.45s
- Exec on running container: 0.17s
To Do
- Move todo list to issue tracker
- Add test coverage to commands
- Add support for language specific deployment (from templates base image)
- Add stream support for stdin / stdout / stderr
- Add pipe-able command support
- Add docker release (
amd64
, arm
)
- Add support for local registry
- Add support for pluggable authentication and authorization (
oauth2
, jwt
)
License
MIT License
Copyright (c) 2017 Luca Capra