Integrate AWS RDS with Shuttle
Seamlessly connect AWS RDS with your Rust applications on Shuttle. Our documentation shows you the steps to ensure robust database management.
This plugin provisions AWS RDS databases on Shuttle. The following engines are supported:
- Postgres
- MySQL
- MariaDB
RDS vs Shared DB
- Dedicated Instance: Each instance of AWS RDS is it’s own dedicated instance.
- Stability and Security: AWS RDS has greater stability due to it being a service directly offered by AWS, and also greater security due to being a dedicated instance.
- Flexible: AWS RDS instances on the Shuttle platform can be customised to suit your needs. Instance size can be increased from the default and AWS RDS features can be enabled or disabled.
On AWS RDS we offer:
- Postgres
- MySQL
- MariaDB
With the Shared DB we offer:
- Postgres
- MongoDB
Default RDS Instance
The RDS instance created by Shuttle has the following specifications and features by default:
- 2 vCPU
- 1 GB Memory
- 20 GiB Storage
- Backups Disabled
- Single Availability Zone
- 1 Node
- No Proxy
The pricing of this instance can be found on our pricing page.
If you require a different configuration, please contact us on Discord or email us at hello@shuttle.rs. We can provision any size or configuration of RDS to suit your needs - a full list of RDS features can be found here
Shuttle makes sure that any data stored in your provisioned database is stored permanently and will persist if you redeploy your server via cargo shuttle deploy
, as well as if you restart your service via cargo shuttle project restart
.
Usage
Start by adding shuttle-aws-rds
to the dependencies for your service.
Each type of database is behind its own feature flag and macro attribute path.
Engine | Feature flag | Attribute path |
---|---|---|
Postgres | postgres | shuttle_aws_rds::Postgres |
MySQL | mysql | shuttle_aws_rds::MySql |
MariaDB | mariadb | shuttle_aws_rds::MariaDB |
Output type
By default, you can get the connection string to the database and connect to it with your preferred library. You can also specify other return types to get rid of common boilerplate.
Depending on which type declaration is used as the output type in the macro, you might need to activate additional feature flags:
Engine | Feature flag | Type declaration | Description |
---|---|---|---|
Any | String | The connection string including username and password | |
Postgres | sqlx (with rustls) or sqlx-native-tls | sqlx::PgPool | An sqlx connection pool with reasonable defaults |
MySQL | sqlx (with rustls) or sqlx-native-tls | sqlx::MySqlPool | An sqlx connection pool with reasonable defaults |
MariaDB | sqlx (with rustls) or sqlx-native-tls | sqlx::MySqlPool | An sqlx connection pool with reasonable defaults |
Lastly, add a macro annotaion to the Shuttle main function. Here are examples for Postgres:
sqlx
compile-time checked macros.Parameters
All of the AWS RDS macros take the same optional parameter:
Parameter | Type | Description |
---|---|---|
local_uri | &str | If specified, on local runs, use this database instead of starting a Docker container for it |
database_name | &str | Name to give the default database. Defaults to project name if none is given |
When passing in strings, you can also insert secrets from Secrets.toml
using string interpolation.
To insert the PASSWORD
secret, pass it in like this:
Secrets.dev.toml
, you need to set the same secret in Secrets.toml
to a empty string so that this step does not crash in deployment.The URI should be formatted according to the Postgres or MySql and MariaDB documentation, depending on which one you’re using.
If you do not specify a local_uri
, then cargo-shuttle will attempt to spin up a Docker container and launch the database inside of it.
For this to succeed, you must have Docker installed and you must also have started the Docker engine. If you have not used Docker
before, the easiest way is to install the desktop app and then launch it in order to start
the Docker engine.
Connection string
After deploying a project with a database macro, you can view the connection string with credentials with:
Using the connection string, you can connect to it for manual querying, inspection, and migration. You can also export/import data using a dump tool suitable for the database of choice.
Example
This snippet shows the main function of a tide app that uses the #[shuttle_aws_rds::Postgres]
attribute macro to provision an RDS Postgres database,
which can be accessed with an sqlx Pool.
Was this page helpful?