[Demo Screencast]
faas
is a "Function as a Service" Client Library and CLI for enabling the development of implicitly deployed, platform agnostic code.
For examples of what's possible, see the Screencast Series or the Functions Cookbook.
Functions can be written in the following languages:
- Go (Golang)
- Node.js (JavaScript)
- Quarkus (Java)
- Rust (Coming Soon)
Functions can be deployed on the following platforms:
- Kubernetes
- OpenShift
- Localhost
[Quickstart Video]
Functions can be created and managed using the CLI interactively, scripted, or by direct integration with the client library. The Function Developer's Guideand examples herein demonstrate the CLI-based approach.
For direct integration using the Go client library, it is advisible to first follow these CLI-based guides to become familiar with creating and deploying software in this way, and then proceed to the Function Integrator's Guide.
Getting Started with Kubernetes
Getting Started with OpenShift
Functions are portable between different infrastructure configurations. While your Function itself remains the same, the platform upon which it is deployed will provide different services and guarantees. For instance, a Function deployed to your local host will not autoscale, nor be highly available nor externally routable by default. Deploying to a properly configured Kubernetes cluster would however provide these features. There is also variance within infrastrucutre types. For instance, a small kubernetes cluster will be limited in the amount of resources which will be ultimately available for allocation to your Function.
Any code which provides one of a set of supported function signatures can be deployed to any of the supported platforms using this client library. No process boundary code, container, or configuration outside of the function itself is required.
At their most fundamental, a Function is a set of instructions which export a public function whose method signature conforms to one of the supported forms. It is implicitly deployed to a supported platform when created using the client library, and can be migrated between platforms without code changes. Runtime execution is handled by the platform, which may offer guarantees such as autoscaling and load balancing.