Skip to content
Config Schema

AWS RDS Provisioner Extension

The aws-rds-provisioner extension provisions and manages a PostgreSQL instance on AWS RDS for a project.

  • Creates and manages an RDS PostgreSQL instance.
  • Supports shared or deployment-group-isolated database layouts.
  • Injects connection variables into deployments.
  • Handles database credential lifecycle.

The modules/rise-aws Terraform module includes built-in support for the RDS extension. Enable it with enable_rds = true alongside your VPC configuration:

module "rise_aws" {
source = "path/to/modules/rise-aws"
name = "rise-backend"
# ... other options (ECR, IRSA, etc.) ...
enable_rds = true
rds_vpc_id = "vpc-0abc123"
rds_subnet_ids = ["subnet-aaa", "subnet-bbb"]
rds_allowed_security_groups = ["sg-eks-nodes"] # allow EKS nodes to reach RDS
}

The module creates:

  • IAM permissions scoped to RDS instances and subnet groups prefixed with var.name
  • An RDS DB subnet group for VPC placement
  • An RDS security group with ingress rules from the specified security groups or CIDR blocks

The rise_config output includes the values needed for the backend extension config:

output "rise_config" {
value = module.rise_aws.rise_config
# rds.vpc_security_group_ids → backend config vpc_security_group_ids
# rds.db_subnet_group_name → backend config db_subnet_group_name
}
VariableDescription
rds_vpc_idVPC where RDS instances are placed
rds_subnet_idsSubnets for the DB subnet group (across multiple AZs)
rds_allowed_security_groupsSecurity groups allowed to reach RDS on port 5432 (e.g., EKS node group SG)
rds_allowed_cidr_blocksCIDR blocks allowed to reach RDS on port 5432 (alternative to SGs)

Configure the extension provider in your Rise backend config:

extensions:
providers:
- type: aws-rds-provisioner
region: "eu-west-1"
instance_size: "db.t4g.micro"
disk_size: 20
instance_id_prefix: "rise" # must match IAM policy prefix in Terraform
default_engine_version: "16.4"
vpc_security_group_ids: # from Terraform rise_config output
- "sg-0abc123"
db_subnet_group_name: "rise-backend-rds-xxxx" # from Terraform rise_config output
backup_retention_days: 7
# backup_window: "03:00-04:00"
# maintenance_window: "sun:04:00-sun:05:00"

For non-AWS deployments (Rise running outside EKS), also provide static credentials:

access_key_id: "AKIA..."
secret_access_key: "${RDS_SECRET_ACCESS_KEY}"
FieldRequiredDescription
regionyesAWS region for RDS instances
instance_sizeyesRDS instance class (e.g., db.t4g.micro)
disk_sizeyesAllocated storage in GiB
instance_id_prefixnoPrefix for RDS identifiers; must match IAM policy (default: rise)
instance_id_templatenoTemplate for instance IDs (default: {prefix}-{project_name}-{extension_name})
default_engine_versionnoDefault PostgreSQL version if not specified per-project
vpc_security_group_idsnoVPC security group IDs for the RDS instance
db_subnet_group_namenoDB subnet group for VPC placement
backup_retention_daysnoBackup retention in days, 1–35 (default: 7)
backup_windownoPreferred backup window in UTC (e.g., 03:00-04:00)
maintenance_windownoPreferred maintenance window (e.g., sun:04:00-sun:05:00)

Users configure the extension per-project through the API or web UI:

{
"engine": "postgres",
"engine_version": "16.2",
"database_isolation": "shared",
"database_url_env_var": "DATABASE_URL",
"inject_pg_vars": true
}
FieldDescription
engineCurrently postgres
engine_versionOverride the default PostgreSQL version
database_isolationshared (one DB for all groups) or isolated (one DB per deployment group)
database_url_env_varName of the injected connection URL variable (default: DATABASE_URL)
inject_pg_varsAlso inject PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD
  • Initial provisioning may take several minutes.
  • In shared mode, all deployment groups share one database.
  • In isolated mode, each deployment group gets its own database.