Poor man's function as a service.
fx is a tool to help you do Function as a Service on your own server. fx can make your stateless function a service in seconds. The most exciting thing is that you can write your functions with most programming languages.
Language | Status | Contributor |
---|---|---|
Go | Supported | fx |
Node | Supported | fx |
Python | Supported | fx |
Ruby | Supported | fx |
Java | Supported | fx |
PHP | Supported | @chlins |
Julia | Supported | @mbesancon |
R | Working on need your help | |
Scala | Working on | |
Perl | Working on | |
.Net | Working on | |
Rust | Working on |
Welcome to tweet me or Buy me a coffee
- Docker: make sure Docker installed and running on your server.
- dep: fx project uses dep to do the golang dependency management.
$ git clone https://github.com/metrue/fx.git
$ cd fx
$ dep ensure
$ go install ./
- start server
fx serve
now you can make a function to service in a second.
fx up ./examples/functions/func.js
the function defined in examples/functions/func.js is quite simple, it calculates the sum of two numbers then returns:
module.exports = (input) => {
return parseInt(input.a, 10) + parseInt(input.b, 10)
}
then you can test your service:
curl -X POST <service url> -H "Content-Type: application/json" -d '{"a": 1, "b": 1}'
of course you can do more.
Usage:
$ fx serve start f(x) server
$ fx up func1.js func2.py func3.go ... deploy a function or a group of functions
$ fx down [service ID] ... destroy a function or a group of functions
$ fx list list deployed services
$ fx --version show current version of f(x)
functions example with Go, Ruby, Python, Node, PHP.
- Go
package main
type Input struct {
A int32
B int32
}
type Output struct {
Sum int32
}
func Fx(input *Input) (output *Output) {
output = &Output{
Sum: input.A + input.B,
}
return
}
- Ruby
def fx(input)
return input['a'] + input['b']
end
- Java
package fx;
import org.json.JSONObject;
public class Fx {
public int handle(JSONObject input) {
String a = input.get("a").toString();
String b = input.get("b").toString();
return Integer.parseInt(a) + Integer.parseInt(b);
}
}
- Python
def fx(input):
return input['a'] + input['b']
- Node
module.exports = (input) => {
return parseInt(input.a, 10) + parseInt(input.b, 10)
}
- PHP
<?php
function Fx($input) {
return $input["a"]+$input["b"];
}
- Julia
struct Input
a::Number
b::Number
end
fx = function(input::Input)
return input.a + input.b
end
Thank you to all the people who already contributed to fx!
MIT