5 releases
0.0.5 | Jan 11, 2020 |
---|---|
0.0.4 | Oct 2, 2019 |
0.0.3 | Sep 12, 2019 |
0.0.2 | Jun 17, 2019 |
0.0.1 | Jun 16, 2019 |
#87 in #serverless
Used in vinyl-embly
50KB
1K
SLoC
embly
A serverless web application framework for collaboration and scale.
For more background and details about what embly is read here or here
Hello World
Create a new folder and add the following files and directory structure:
├── embly.hcl
└── hello
├── Cargo.toml
└── src
└── main.rs
Now add the following file contents:
embly.hcl
:
function "hello" {
runtime = "rust"
path = "./hello"
}
gateway {
type = "http"
port = 8765
route "/" {
function = "${function.hello}"
}
}
hello/Cargo.toml
:
[package]
name = "hello"
version = "0.0.1"
edition = "2018"
[dependencies]
embly = "0.0.5"
hello/src/main.rs
:
extern crate embly;
use embly::{
http::{run_catch_error, Body, Request, ResponseWriter},
prelude::*,
Error,
};
async fn execute(_req: Request<Body>, mut w: ResponseWriter) -> Result<(), Error> {
w.write_all(b"Hello World")?; // writing our hello response bytes
Ok(()) // if an error is returned the server will respond with an HTTP error
}
// this function is run first
fn main() {
run_catch_error(execute); // this is the embly::http::run function that is specific to http responses
}
You can now run your project for local development with embly dev
, although the fastest way to get started is with docker:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/app -p 8765:8765 -it embly/embly embly dev
More on how to run embly in the installation section.
The embly Command
$ embly
Usage: embly [--version] [--help] <command> [<args>]
Available commands are:
build Build an embly project
bundle Create a bundled project file
db Run various database maintenace tasks.
dev Develop a local embly project
run Run a local embly project
Installation
embly uses docker to download and run build images. It's recommended that you run embly from within a docker container and give it access to the docker socket. If you are in the root of an embly project you can start the dev server like so:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/app -p 8765:8765 -it embly/embly embly dev
If you would like to run embly locally you'll need to have cargo
and go
installed. The following sequence of commands should work:
go get github.com/embly/embly/cmd/embly
cargo install embly-wrapper
cargo install lucetc
Links
embly used to be wasabi, which was more focused on providing full operating system functionality within a webassembly runtime. That code is available here.
lib.rs
:
Embly is a serverless webassembly runtime. It runs small isolated functions. Functions can do a handful of things:
- Receive bytes
- Send bytes
- Spawn a new function
This library is used to access embly functionality from within a program being run by Embly.
A "prelude" for crates using the embly
crate
imports io::Read and io::Write
pub use std::io::Read as _;
pub use std::io::Write as _;
Dependencies
~5–10MB
~124K SLoC