Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/fdaciuk/sls-rust

A Serverless framework plugin for Rust applications
https://github.com/fdaciuk/sls-rust

aws lambda rust rustlang serverless

Last synced: 2 days ago
JSON representation

A Serverless framework plugin for Rust applications

Awesome Lists containing this project

README

        


πŸ¦€ sls-rust


A ⚑ Serverless framework ⚑ plugin for Rust applications

> Note: this plugin was inspired on [softprops/serverless-rust](https://github.com/softprops/serverless-rust).
> Since the `serverless-rust` plugin is not activelly mantained, I created this
> one to work with minimal effort as possible: without docker, and probably only
> run on Linux (not tested on other OS). Great for CI environments.

## πŸ“¦ Install

You should put the `serverless.yml` file outside the Rust project directory:

```console
.
β”œβ”€β”€ your_rust_project
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  └── main.rs
β”‚Β Β  └── Cargo.toml
β”œβ”€β”€ package.json
└── serverless.yml
```

Install the plugin inside your serverless project with npm.

```console
$ npm i -D sls-rust
```

πŸ’‘The `-D` flag adds it to your development dependencies in npm speak

πŸ’‘ This plugin assumes you are building Rustlang lambdas targeting the AWS Lambda "provided.al2" runtime. The [AWS Lambda Rust Runtime](https://github.com/awslabs/aws-lambda-rust-runtime) makes this easy.

Add the following to your serverless project's `serverless.yml` file

```yaml
service: demo
frameworkVersion: '3'
configValidationMode: error

provider:
name: aws
memorySize: 128
region: us-east-1

plugins:
# this registers the plugin with serverless
- sls-rust

# creates one artifact for each function
package:
individually: true

functions:
test:
# handler value syntax is `{rust_project_path}.{project_binary_name}`
handler: rust_project_path.project_binary_name
# you must use tags.rust = true to make this plugin works:
tags:
rust: true
```

> πŸ’‘ The Rust Lambda runtime requires a binary named `bootstrap`. This plugin renames the binary cargo builds to `bootstrap` for you. You do **not** need to do this manually in your `Cargo.toml` configuration file.

In order to use this mode its expected that you install the `x86_64-unknown-linux-musl` target on all platforms locally with

```sh
$ rustup target add x86_64-unknown-linux-musl
```

On linux platforms, you will need to install musl-tools

```sh
$ sudo apt-get update && sudo apt-get install -y musl-tools
```

On Mac OSX, you will need to install a MUSL cross compilation toolchain

```sh
$ brew install filosottile/musl-cross/musl-cross
```

## 🀸 usage

Every [serverless workflow command](https://serverless.com/framework/docs/providers/aws/guide/workflow/) should work out of the box.

### invoke your lambdas locally

```sh
$ npx serverless invoke local -f hello -d '{"hello":"world"}'
```

### deploy your lambdas to the cloud

```sh
$ npx serverless deploy
```

### invoke your lambdas in the cloud directly

```sh
$ npx serverless invoke -f hello -d '{"hello":"world"}'
```

### view your lambdas logs

```sh
$ npx serverless logs -f hello
```

## License

MIT