A Terraform module to create an Amazon Web Services (AWS) PostgreSQL Relational Database Server (RDS).
terraform-aws-postgresql-rds
A Terraform module to create an Amazon Web Services (AWS) PostgreSQL Relational Database Server (RDS).
Usage
module "postgresql_rds" {
source = "github.com/azavea/terraform-aws-postgresql-rds"
vpc_id = "vpc-20f74844"
allocated_storage = "32"
engine_version = "9.4.4"
instance_type = "db.t2.micro"
storage_type = "gp2"
database_identifier = "jl23kj32sdf"
database_name = "hector"
database_username = "hector"
database_password = "secret"
database_port = "5432"
backupretentionperiod = "30"
backup_window = "04:00-04:30"
maintenance_window = "sun:04:30-sun:05:30"
autominorversion_upgrade = false
multiavailabilityzone = true
storage_encrypted = false
subnetgroup = awsdbsubnetgroup.default.name
parametergroup = awsdbparametergroup.default.name
monitoring_interval = "60"
deletion_protection = true
cloudwatchlogsexports = ["postgresql"]
alarmcputhreshold = "75" alarmdiskqueue_threshold = "10" alarmfreedisk_threshold = "5000000000" alarmfreememory_threshold = "128000000" alarm_actions = ["arn:aws:sns..."] ok_actions = ["arn:aws:sns..."] insufficientdataactions = ["arn:aws:sns..."]
project = "Something" environment = "Staging" }
Note about Enhanced Monitoring support
If the monitoringinterval passed as an input to this module is 0, an empty monitoringrolearn value will be passed to the awsdb_instance resource.
This is because, if a value for monitoringrolearn is passed to an awsdbinstance, along with a monitoring_interval of 0, the following error will occur:
InvalidParameterCombination: You must specify a MonitoringInterval value other than 0 when you specify a MonitoringRoleARN value.
If you're curious to know more, see the discussion within https://github.com/terraform-providers/terraform-provider-aws/issues/315.
Variables
vpc_id- ID of VPC meant to house databaseproject- Name of project this VPC is meant to house (default:Unknown)environment- Name of environment this VPC is targeting (default:Unknown)allocated_storage- Storage allocated to database instance (default:32)engine_version- Database engine version (default:11.5)instance_type- Instance type for database instance (default:db.t3.micro)storage_type- Type of underlying storage for database (default:gp2)iops- The amount of provisioned IOPS. Setting this implies astorage_typeofio1(default:0)database_identifier- Identifier for RDS instancesnapshot_identifier- The name of the snapshot (if any) the database should be created fromdatabase_name- Name of database inside storage enginedatabase_username- Name of user inside storage enginedatabase_password- Database password inside storage enginedatabase_port- Port on which database will accept connections (default5432)backupretentionperiod- Number of days to keep database backups (default:
30)
backup_window- 30 minute time window to reserve for backups (default:
04:00-04:30)
maintenance_window- 60 minute time window to reserve for maintenance
sun:04:30-sun:05:30)
autominorversion_upgrade- Minor engine upgrades are applied automatically
true)
finalsnapshotidentifier- Identifier for final snapshot ifskipfinalsnapshotis set tofalse(default:terraform-aws-postgresql-rds-snapshot)skipfinalsnapshot- Flag to enable or disable a snapshot if the database instance is terminated (default:true)copytagsto_snapshot- Flag to enable or disable copying instance tags to the final snapshot (default:false)multiavailabilityzone- Flag to enable hot standby in another availability
false)
storage_encrypted- Flag to enable storage encryption (default:false)monitoring_interval- The interval, in seconds, between points when Enhanced Monitoring metrics are collected (default:0)deletion_protection- Flag to protect the database instance from deletion (default:false)cloudwatchlogsexports- List of logs to publish to CloudWatch Logs. See all available options. (default:["postgresql, "upgrade"])subnet_group- Database subnet groupparameter_group- Database engine parameter group (default:
default.postgres11)
alarmcputhreshold- CPU alarm threshold as a percentage (default:75)alarmdiskqueue_threshold- Disk queue alarm threshold (default:10)alarmfreedisk_threshold- Free disk alarm threshold in bytes (default:5000000000)alarmfreememory_threshold- Free memory alarm threshold in bytes (default:128000000)alarmcpucreditbalancethreshold- CPU credit balance threshold (default:30). Only used fordb.t*instance typesalarm_actions- List of ARNs to be notified via CloudWatch when alarm enters ALARM stateok_actions- List of ARNs to be notified via CloudWatch when alarm enters OK stateinsufficientdataactions- List of ARNs to be notified via CloudWatch when alarm enters INSUFFICIENT_DATA statetags- Extra tags to attach to the RDS resources (default:{})
Outputs
id- The database instance IDdatabasesecuritygroup_id- Security group ID of the databasehostedzoneid- The zone id for the autogenerated DNS name given inendpoint.hostname- Public DNS name of database instanceport- Port of database instanceendpoint- Public DNS name and port separated by a colon
endpoint