Skip to content
Terraform module which creates Aurora Serverless resources on AWS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests initial commit May 2, 2019
LICENSE
MAINTAINERS.md initial commit May 2, 2019
Makefile release v0.0.6 May 3, 2019
README.md
alarms.tf remove cloudwatch alarm for instance May 2, 2019
main.tf update README May 3, 2019
outputs.tf remove instance endpoint May 2, 2019
variables.tf

README.md

AWS Aurora Serverless Terraform module

Build Status LicenseBadge

AWS Aurora DB Cluster for Serverless Terraform Module.

Gives you:

  • A DB subnet group
  • An Aurora DB cluster
  • Optionally RDS 'Enhanced Monitoring' + associated required IAM role/policy (by simply setting the monitoring_interval param to > 0
  • Optionally sensible alarms to SNS (high CPU, high connections, slow replication)

Terraform version

Terraform version 0.10.3 or newer is required for this module to work.

Contributing

Ensure any variables you add have a type and a description. This README is generated with terraform-docs:

terraform-docs md . > README.md

Usage examples

It is recommended you always create a parameter group, even if it exactly matches the defaults. Changing the parameter group in use requires a restart of the DB cluster, modifying parameters within a group may not (depending on the parameter being altered)

Aurora 1.x (MySQL 5.6)

resource "aws_sns_topic" "db_alarms_56" {
  name = "aurora-db-alarms-56"
}

module "aurora_db_56" {
  source                          = "../.."
  name                            = "test-aurora-db-56"
  envname                         = "test56"
  envtype                         = "test"
  subnets                         = ["${module.vpc.private_subnets}"]
  azs                             = ["${module.vpc.availability_zones}"]
  security_groups                 = ["${aws_security_group.allow_all.id}"]
  username                        = "root"
  password                        = "changeme"
  backup_retention_period         = "5"
  final_snapshot_identifier       = "final-db-snapshot-prod"
  storage_encrypted               = "true"
  apply_immediately               = "true"
  monitoring_interval             = "10"
  cw_alarms                       = true
  cw_sns_topic                    = "${aws_sns_topic.db_alarms_56.id}"
  db_parameter_group_name         = "${aws_db_parameter_group.aurora_db_56_parameter_group.id}"
  db_cluster_parameter_group_name = "${aws_rds_cluster_parameter_group.aurora_cluster_56_parameter_group.id}"
}

resource "aws_db_parameter_group" "aurora_db_56_parameter_group" {
  name        = "test-aurora-db-56-parameter-group"
  family      = "aurora5.6"
  description = "test-aurora-db-56-parameter-group"
}

resource "aws_rds_cluster_parameter_group" "aurora_cluster_56_parameter_group" {
  name        = "test-aurora-56-cluster-parameter-group"
  family      = "aurora5.6"
  description = "test-aurora-56-cluster-parameter-group"
}

Aurora 2.x (MySQL 5.7)

resource "aws_sns_topic" "db_alarms" {
  name = "aurora-db-alarms"
}

module "aurora_db_57" {
  source                          = "../.."
  engine_version                  = "5.7.12"
  name                            = "test-aurora-db-57"
  envname                         = "test-57"
  envtype                         = "test"
  subnets                         = ["${module.vpc.private_subnets}"]
  azs                             = ["${module.vpc.availability_zones}"]
  security_groups                 = ["${aws_security_group.allow_all.id}"]
  username                        = "root"
  password                        = "changeme"
  backup_retention_period         = "5"
  final_snapshot_identifier       = "final-db-snapshot-prod"
  storage_encrypted               = "true"
  apply_immediately               = "true"
  monitoring_interval             = "10"
  cw_alarms                       = true
  cw_sns_topic                    = "${aws_sns_topic.db_alarms.id}"
  db_parameter_group_name         = "${aws_db_parameter_group.aurora_db_57_parameter_group.id}"
  db_cluster_parameter_group_name = "${aws_rds_cluster_parameter_group.aurora_57_cluster_parameter_group.id}"
}

resource "aws_db_parameter_group" "aurora_db_57_parameter_group" {
  name        = "test-aurora-db-57-parameter-group"
  family      = "aurora-mysql5.7"
  description = "test-aurora-db-57-parameter-group"
}

resource "aws_rds_cluster_parameter_group" "aurora_57_cluster_parameter_group" {
  name        = "test-aurora-57-cluster-parameter-group"
  family      = "aurora-mysql5.7"
  description = "test-aurora-57-cluster-parameter-group"
}

Aurora PostgreSQL

resource "aws_sns_topic" "db_alarms_postgres96" {
  name = "aurora-db-alarms-postgres96"
}

module "aurora_db_postgres96" {
  source                          = "../.."
  engine                          = "aurora-postgresql"
  engine_version                  = "9.6.3"
  name                            = "test-aurora-db-postgres96"
  envname                         = "test-pg96"
  envtype                         = "test"
  subnets                         = ["${module.vpc.private_subnets}"]
  azs                             = ["${module.vpc.availability_zones}"]
  security_groups                 = ["${aws_security_group.allow_all.id}"]
  username                        = "root"
  password                        = "changeme"
  backup_retention_period         = "5"
  final_snapshot_identifier       = "final-db-snapshot-prod"
  storage_encrypted               = "true"
  apply_immediately               = "true"
  monitoring_interval             = "10"
  cw_alarms                       = true
  cw_sns_topic                    = "${aws_sns_topic.db_alarms_postgres96.id}"
  db_parameter_group_name         = "${aws_db_parameter_group.aurora_db_postgres96_parameter_group.id}"
  db_cluster_parameter_group_name = "${aws_rds_cluster_parameter_group.aurora_cluster_postgres96_parameter_group.id}"
}

resource "aws_db_parameter_group" "aurora_db_postgres96_parameter_group" {
  name        = "test-aurora-db-postgres96-parameter-group"
  family      = "aurora-postgresql9.6"
  description = "test-aurora-db-postgres96-parameter-group"
}

resource "aws_rds_cluster_parameter_group" "aurora_cluster_postgres96_parameter_group" {
  name        = "test-aurora-postgres96-cluster-parameter-group"
  family      = "aurora-postgresql9.6"
  description = "test-aurora-postgres96-cluster-parameter-group"
}

Development

Terraform modules on the Terraform Module Registry are open projects, and community contributions are essential for keeping them great. Please follow our guidelines when contributing changes.

For more information, see our module contribution guide.

Contributors

To see who's already involved, see the list of contributors.

Inputs

Name Description Type Default Required
apply_immediately Determines whether or not any DB modifications are applied immediately, or during the maintenance window string "false" no
auto_minor_version_upgrade Determines whether minor engine upgrades will be performed automatically in the maintenance window string "true" no
auto_pause When to perform DB auto pause string "true" no
azs List of AZs to use list n/a yes
backup_retention_period How long to keep backups for (in days) string "7" no
cw_alarms Whether to enable CloudWatch alarms - requires cw_sns_topic is specified string "false" no
cw_eval_period_connections Evaluation period for the DB connections alarms string "1" no
cw_eval_period_cpu Evaluation period for the DB CPU alarms string "2" no
cw_eval_period_replica_lag Evaluation period for the DB replica lag alarm string "5" no
cw_max_conns Connection count beyond which to trigger a CloudWatch alarm string "500" no
cw_max_cpu CPU threshold above which to alarm string "85" no
cw_max_replica_lag Maximum Aurora replica lag in milliseconds above which to alarm string "2000" no
cw_sns_topic An SNS topic to publish CloudWatch alarms to string "false" no
database_name Master DB name string "" no
db_cluster_parameter_group_name The name of a DB Cluster parameter group to use string "default.aurora5.6" no
db_parameter_group_name The name of a DB parameter group to use string "default.aurora5.6" no
enabled Whether the database resources should be created string "true" no
engine_version Aurora database engine version. string "5.6.10a" no
envname Environment name (eg,test, stage or prod) string n/a yes
envtype Environment type (eg,prod or nonprod) string n/a yes
final_snapshot_identifier The name to use when creating a final snapshot on cluster destroy, appends a random 8 digits to name to ensure it's unique too. string "final" no
iam_database_authentication_enabled Whether to enable IAM database authentication for the RDS Cluster string "false" no
identifier_prefix Prefix for cluster identifier string "" no
max_capacity The max capacity for database string "8" no
min_capacity The min capacity for database string "2" no
monitoring_interval The interval (seconds) between points when Enhanced Monitoring metrics are collected string "0" no
name Name given to DB subnet group string n/a yes
password Master DB password string n/a yes
performance_insights_enabled Whether to enable Performance Insights string "false" no
port The port on which to accept connections string "3306" no
preferred_backup_window When to perform DB backups string "02:00-03:00" no
preferred_maintenance_window When to perform DB maintenance string "sun:05:00-sun:06:00" no
publicly_accessible Whether the DB should have a public IP address string "false" no
security_groups VPC Security Group IDs list n/a yes
skip_final_snapshot Should a final snapshot be created on cluster destroy string "false" no
snapshot_identifier DB snapshot to create this database from string "" no
storage_encrypted Specifies whether the underlying storage layer should be encrypted string "true" no
subnets List of subnet IDs to use list n/a yes
username Master DB username string "root" no

Outputs

Name Description
cluster_endpoint The 'writer' endpoint for the cluster
cluster_identifier The ID of the RDS Cluster
reader_endpoint A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas
You can’t perform that action at this time.