Awesome
serverless AWS Rust kinesis stream template
A sample template for bootstraping Rustlang AWS Lambda kinesis stream ๐ฐ applications with โก serverless framework โก
โจ features
- ๐ฆ Build Rustlang applications with ease
- ๐ต Continuous integration testing with GitHub Actions
- ๐ Continuous deployment with GitHub Actions
- ๐งช Getting started unit tests
๐ฆ install
Install the serverless framework cli.
Then then run the following in your terminal
$ npx serverless install \
--url https://github.com/softprops/serverless-aws-rust-kinesis \
--name my-new-kinesis-func
This will download the source of a sample Rustlang application and unpack it as a new service named "my-new-kinesis-func" in a directory called "my-new-kinesis-func"
๐ง how to be a wizard
Assumming you have aws credentials with appropriate deployment permissions configured (if you already use any existing AWS tooling installed you likely already have this configured), you could impress your friends by creating a project connected to an existing
kinesis stream identified by environment variable KINESIS_STREAM_ARN
that is born in production.
$ npx serverless install \
--url https://github.com/softprops/serverless-aws-rust-multi \
--name my-new-kinesis-func \
&& cd my-new-kinesis-func \
&& npm ci \
&& KINESIS_STREAM_ARN=xxx npx serverless deploy
npm ci
will make sure npm dependencies are installed based directly on your package-lock.json file. This only needs run once.
The first time you run npx serverless deploy
it will pull down and compile the base set
of dependencies and your application. Unless the dependencies change afterwards,
this should only happen once, resulting in an out of the box rapid deployment
cycle.
๐ต continuous integration and deployment
This template includes an example GitHub actions configuration file which can unlock a virtuous cycle of continuous integration and deployment ( i.e all tests are run on prs and every push to master results in a deployment ).
GitHub actions is managed simply by the presence of a file checked into your repository. To set up GitHub Actions to deploy to AWS you'll need to do a few things
Firstly, version control your source. Github is free for opensource.
$ git init
$ git remote add origin git@github.com:{username}/{my-new-service}.git
Store a AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
used for aws deployment in your repositories secrets https://github.com/{username}/{my-new-service}/settings/secrets
Add your changes to git and push them to GitHub.
Finally, open https://github.com/{username}/{my-new-service}/actions in your browser and grab a bucket of popcorn ๐ฟ
๐ซ function triggering
With your function deployed you can now start triggering it using serverless
framework directly or
the AWS integration you've configured to trigger it on your behalf
$ npx serverless invoke local -f hello \
< tests/example-event.json
๐ฌ logs
With your function deployed you can now tail it's logs right from your project
$ npx serverless logs -f hello
๐ด retiring
Good code should be easily replaceable. Good code is should also be easily disposable. Retiring applications should be as easy as creating and deploying them them. The dual of serverless deploy
is serverless remove
. Use this for retiring services and cleaning up resources.
$ npx serverless remove
โน๏ธ additional information
-
See the serverless-rust plugin's documentation for more information on plugin usage.
-
See the aws rust runtime's documentation for more information on writing Rustlang lambda functions
-
See the Serverless Framework docs for more information on configuration options for kinesis streams
-
See the AWS docs for more information on general lambda information about working with kinesis streams.
๐ฏ Contributing
This template's intent is to set a minimal baseline for getting engineers up an running with a set of repeatable best practices. See something you'd like in this template that would help others? Feel free to open a new GitHub issue. Pull requests are also welcome.