Building Alexa Skills in Rust

Finally, AWS Lambda supports custom runtimes and a built in runtime for Rust. This is exciting both because Rust is a fantastic language and because, with the Firecracker micro VM (also built in Rust), Rust Lambdas have trivial cold-start times.

The same day Rust Lambdas were announced, I followed the instructions and built a “Hello, World” Lambda, but that’s a little limited.

My favorite way to explore Lambdas is to build Alexa skills because of the immediate feedback: you write a little code, and a home device talks to you. It’s a peek into the long promised of world of easy service composition.

Unfortunately, Rust didn’t have complete Alexa skill request/response handling (there is a crate from 2 years ago that handled only the basics), so I wrote one called alexa_sdk. (It’s basically a struct plus serde wrapper around the Alexa JSON spec, with some helpers.

Last year, when Go support was announced, I wrote up how to automate the creation and deployment of binary Lambdas; here, I’m just going to concentrate on the basics of the Rust Lambda itself.

The Cargo.toml:

The build script (the Go example referenced above provides a template for a more complete build script that automates creation and upload of the Lambda):

And the service implementation itself:

Set up an Alexa skill:

And let Alexa say hello:

Please try it out and give me feedback (via the Github repository).