/rust_serverless_runtime

A serverless runtime in 200 lines atop deno and sqlite

Primary LanguageRustMIT LicenseMIT

This repo is a demonstration of how you could build your own "serverless" platform with data persistence in only 200~ lines of simple, safe code.

It combines deno (rust v8 runtime), axum (http library), and rusqlite (sqlite) to build a Function as a Service (FaaS)-like application with file-system backed storage.

A user submits javascript code with a HTTP POST request, then is able to invoke their function via GET requests.

The js environment the code is executed within has access to 3 operations implemented in rust. console.log emits messages via stdout on the server, set inserts into a sqlite backed key-value store, and get retrieves from the same store.

The last evaluated expression from an invoked js function will be returned in the HTTP GET response body.

Example

serverless_demo.mov

In your first terminal

cargo run

In your second terminal

# Submit the contents of fn.js as the function "raccoon"
curl -d @fn.js localhost:8080/fn/raccoon

# Invoke the function by it's name
curl localhost:8080/fn/raccoon

# And a couple more times... just in case
curl localhost:8080/fn/raccoon
curl localhost:8080/fn/raccoon
curl localhost:8080/fn/raccoon