4 releases
0.1.3 | Feb 2, 2021 |
---|---|
0.1.2 | Feb 2, 2021 |
0.1.1 | Feb 1, 2021 |
0.1.0 | Feb 1, 2021 |
#3 in #tencent
62KB
709 lines
Rust Runtime for Serverless Compute Function on Tencent Cloud
⚠️ DISCLAIMER: The author is NOT affiliated with Tencent and the project is NOT endorsed by Tencent. This project was developed solely out of personal use.
Motivation
There is a well-known crate lambda_runtime that provides a runtime for rust as AWS Lambda. Recently I need to run some service on Tencent cloud and it is also well-known that Tencent Serverless Compute Function is simply a replica of AWS Lambda with a worse name. So I created this library with sligtly lighter dependencies than lambda_runtime
and slightly different design decisions. It shouldn't be very hard to adapt an AWS Lambda to a Tencent Serverless Compute Function although concrete APIs are a little bit different.
Example Function
The code below creates a simple function that receives an event with a firstName
field and returns a message to the caller, adapted from lambda_runtime
. Compiling the code requires json
feature enabled.
use serde_json::{json, Value};
use tencent_scf::{convert::AsJson, make_scf, Context};
type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
fn main() {
let func = make_scf(func);
tencent_scf::start(func);
}
fn func(event: Value, _: Context) -> Result<Value, Error> {
let first_name = event["firstName"].as_str().unwrap_or("world");
Ok(json!({ "message": format!("Hello, {}!", first_name) }))
}
Deployment
The deployment is almost the same as Deploy AWS Lambda. User should try to follow that guide to create, compile and build the function. We outline the steps as follows:
- Creating a Rust Function: follow the same instructions for AWS Lambda. The binary name should be
boostrap
, just like AWS Lambda. - Compiling and Building:
x86_64-unknown-linux-musl
target should be used, just like AWS Lambda. - Deploy the Function on Tencent Cloud: this is the step where things deviate a little bit:
- In the page for creating a serverless compute function,
- Choose "Custom Creation" for the "Creation Method".
- Choose "CustomRuntime" for the "Execution Environment".
- Choose "Upload zip archive" for the "Submission Method".
- Upload the
bootstrap.zip
file from step 2. - (If needed) Set up other advanced configuration/triggers.
- Click "Finish".
Roadmap
- Add a GitHub Workflow for auto testing.
- Add more examples.
- Add more tests.
- Add more built-in events and responses.
License
Licensed under either of:
at your option.
Dependencies
~2.7–4MB
~75K SLoC