OpenFaaS (Functions as a Service) is a framework for building serverless functions with Docker which has first class support for metrics. Any process can be packaged as a function enabling you to consume a range of web events without repetitive boiler-plate coding.
Highlights
- Ease of use through UI portal and one-click install
- Write functions in any language for Linux or Windows and package in Docker/OCI image format
- Portable - runs on existing hardware or public/private cloud - Kubernetes and Docker Swarm native
- CLI available with YAML format for templating and defining functions
- Auto-scales as demand increases
OpenFaaS is an independent project created by Alex Ellis which is now being built and shaped by a growing community of contributors. Project website: openfaas.com.
- You can make any Docker image into a serverless function by adding the Function Watchdog (a tiny Golang HTTP server)
- The Function Watchdog is the entrypoint allowing HTTP requests to be forwarded to the target process via STDIN. The response is sent back to the caller by writing to STDOUT from your application.
- The API Gateway provides an external route into your functions and collects Cloud Native metrics through Prometheus.
- Your API Gateway will scale functions according to demand by altering the service replica count in the Docker Swarm or Kubernetes API.
- A UI is baked in allowing you to invoke functions in your browser and create new ones as needed.
The API Gateway is a RESTful micro-service and you can view the Swagger docs here.
Any container or process in a Docker container can be a serverless function in FaaS. Using the FaaS CLI you can deploy your functions or quickly create new functions from templates such as Node.js or Python.
The CLI is effectively a RESTful client for the API Gateway.
When you have OpenFaaS configured you can get started with the CLI here
You can generate new functions using the FaaS-CLI and built-in templates or use any binary for Windows or Linux in a Docker container.
- Python example:
import requests
def handle(req):
r = requests.get(req, timeout = 1)
print(req +" => " + str(r.status_code))
handler.py
- Node.js example:
"use strict"
module.exports = (callback, context) => {
callback(null, {"message": "You said: " + context})
}
handler.js
Other Sample functions are available in the Github repository in a range of programming languages.
Docker Swarm
The deployment guide for Docker Swarm contains a simple one-line command to get you up and running in around 60 seconds. It also includes a set of sample functions which you can use with the TestDrive instructions below.
Deployment guide for Docker Swarm
Kubernetes
OpenFaaS is Kubernetes-native - you can follow the deployment guide here.
Docker Playground
You can quickly start OpenFaaS on Docker Swarm online using the community-run Docker playground: play-with-docker.com (PWD) by clicking the button below:
Here is a screenshot of the API gateway portal - designed for ease of use.
Great overview of OpenFaaS features, users and roadmap.
Functions as a Service or FaaS was a winner in the Cool Hacks contest for Dockercon 2017.
If you'd like to find the functions I used in the demos, head over to the faas-dockercon repository.
Background story
This is my original blog post on FaaS from January: Functions as a Service blog post
Have you written a blog about OpenFaaS? Send a Pull Request to the community page below.
If you'd like to join OpenFaaS community Slack channel to chat with contributors or get some help - then send a Tweet to @alexellisuk or email [email protected].
OpenFaaS is written in Golang and is MIT licensed - contributions are welcomed whether that means providing feedback, testing existing and new feature or hacking on the source.
To get started you can read the roadmap and contribution guide or:
Highlights:
- New: Kubernetes support via FaaS-netes plugin
- New: FaaS CLI and easy install via
curl
andbrew
- New: Windows function support
- New: Asynchronous/long-running OpenFaaS functions via NATS Streaming - Follow this guide
Anyone is invited to contribute to the project in-line with the contribution guide - you can also read the guide for ideas on how to get involved. We invite new contributors to join our Slack community. We would also ask you to propose any changes or contributions ahead of time, especially when there is no issue or proposal alredy tracking it.
Example of a Grafana dashboard linked to OpenFaaS showing auto-scaling live in action:
Sample dashboard JSON file available here