IaC Bazaar
AWSLive-tested

RDS Instance (PostgreSQL/MySQL)

Single-instance or Multi-AZ RDS with subnet/parameter/option groups, backups, and monitoring wired correctly.

terraformAWS#aws

Compare Managed Relational Database across clouds →

aws-rdsterraform v1.7

Verification

Live-tested

Really deployed, verified, idempotent and destroyed in a cloud sandbox.

Conformance

  • Static validation (fmt · validate · tflint)
  • Security scan: findings disclosed (Checkov)
  • Plan tests (mocked: validation rules · outputs)

Provenance

  • SHA-256 checksum
  • Signature (pending)

Functional

  • Live-tested — applied, verified, destroyed

Last verified 2026-06-19 · how we verify

Documentation

aws-rds

Single-instance or Multi-AZ RDS (PostgreSQL/MySQL/MariaDB) with subnet, parameter, and option groups, backups, and monitoring wired correctly. Works with Terraform and OpenTofu (>= 1.6), AWS provider >= 6.0, < 7.0.

Secure defaults:

  • Storage always encrypted (AWS-managed aws/rds key, or your CMK via kms_key_arn)
  • Master password generated by RDS and stored in Secrets Manager — never in state
  • publicly_accessible = false, dedicated subnet group on your private subnets
  • Deletion protection on and final snapshot kept (both overridable for test stacks)
  • 7-day automated backups, tags copied to snapshots, auto minor version upgrades
  • Dedicated parameter group — never the shared AWS default
  • Enhanced monitoring: set monitoring_interval > 0 and the module creates the IAM role

Usage

module "db" {
  source = "./aws-rds"

  identifier             = "myapp-prod"
  engine                 = "postgres"
  engine_version         = "16.6"
  parameter_group_family = "postgres16"
  instance_class         = "db.r6g.large"
  multi_az               = true

  subnet_ids             = ["subnet-aaa", "subnet-bbb"]
  vpc_security_group_ids = ["sg-12345"]

  database_name       = "myapp"
  monitoring_interval = 60

  tags = { Environment = "prod" }
}

The managed master password lands in Secrets Manager; read it via master_user_secret_arn. For ephemeral environments set deletion_protection = false and skip_final_snapshot = true.

Inputs

NameTypeDefaultDescription
identifierstringInstance identifier; also names the groups (required)
enginestringpostgres, mysql, or mariadb (required)
engine_versionstringnullEngine version; null = AWS default
instance_classstring"db.t4g.micro"Instance class
parameter_group_familystringe.g. postgres16, mysql8.0 (required)
parameterslist(object)[]Parameters {name, value, apply_method}
create_option_groupboolfalseCreate an option group (MySQL/MariaDB)
major_engine_versionstringnullRequired with create_option_group
optionslist(object)[]Option-group options + settings
database_namestringnullInitial database to create
master_usernamestring"dbadmin"Master username
master_passwordstringnullExplicit password; null = Secrets-Manager-managed
portnumbernullListener port; null = engine default
multi_azboolfalseMulti-AZ standby
subnet_idslist(string)>= 2 private subnets (required)
vpc_security_group_idslist(string)Security groups (required)
storage_typestring"gp3"gp3/gp2/io1/io2
allocated_storagenumber20Initial storage GiB
max_allocated_storagenumber100Autoscaling ceiling; 0 disables
iopsnumbernullProvisioned IOPS
storage_throughputnumbernullgp3 throughput MiBps
kms_key_arnstringnullCMK for storage encryption
backup_retention_periodnumber7Backup retention days (0–35)
preferred_backup_windowstring"02:00-03:00"Daily backup window (UTC)
preferred_maintenance_windowstring"sun:04:00-sun:05:00"Maintenance window
delete_automated_backupsboolfalseDrop backups on delete
skip_final_snapshotboolfalseSkip final snapshot on destroy
deletion_protectionbooltrueDeletion protection
apply_immediatelyboolfalseApply changes immediately
enabled_cloudwatch_logs_exportslist(string)[]Log types to export
monitoring_intervalnumber0Enhanced monitoring seconds (0/1/5/10/15/30/60)
monitoring_role_arnstringnullBYO monitoring role; null = module-created
performance_insights_enabledboolfalsePerformance Insights (unsupported on micro/small classes)
performance_insights_retention_periodnumber7PI retention days
performance_insights_kms_key_idstringnullCMK for PI data
iam_database_authentication_enabledboolfalseIAM DB auth (postgres/mysql)
ca_cert_identifierstringnullCA bundle
tagsmap(string){}Tags for all resources

Outputs

instance_id, instance_arn, instance_address, instance_endpoint, instance_port, instance_resource_id, master_user_secret_arn, db_subnet_group_name, parameter_group_name, option_group_name, monitoring_role_arn.

Requirements

  • Terraform or OpenTofu >= 1.6
  • hashicorp/aws >= 6.0, < 7.0

Verification

Static-validated (fmt, validate, tflint). Live apply/destroy testing pending cloud sandbox availability — see catalog status.

License

Commercial — IaC Bazaar EULA. © IaC Bazaar. Original work (not derived from a third-party module).