Skip to content

Commit

Permalink
feat: Add MySql serverless v2 example (#295)
Browse files Browse the repository at this point in the history
  • Loading branch information
wojukasz authored Jun 20, 2022
1 parent ca40e23 commit 0390b59
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 24 deletions.
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.70.1
rev: v1.72.1
hooks:
- id: terraform_fmt
- id: terraform_validate
Expand All @@ -23,7 +23,7 @@ repos:
- '--args=--only=terraform_standard_module_structure'
- '--args=--only=terraform_workspace_remote'
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
rev: v4.3.0
hooks:
- id: check-merge-conflict
- id: end-of-file-fixer
23 changes: 23 additions & 0 deletions examples/serverless/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Source | Version |
|------|--------|---------|
| <a name="module_aurora_mysql"></a> [aurora\_mysql](#module\_aurora\_mysql) | ../../ | n/a |
| <a name="module_aurora_mysql_serverlessv2"></a> [aurora\_mysql\_serverlessv2](#module\_aurora\_mysql\_serverlessv2) | ../../ | n/a |
| <a name="module_aurora_postgresql"></a> [aurora\_postgresql](#module\_aurora\_postgresql) | ../../ | n/a |
| <a name="module_aurora_postgresql_serverlessv2"></a> [aurora\_postgresql\_serverlessv2](#module\_aurora\_postgresql\_serverlessv2) | ../../ | n/a |
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 3.0 |
Expand All @@ -42,9 +43,11 @@ Note that this example may create resources which cost money. Run `terraform des
| Name | Type |
|------|------|
| [aws_db_parameter_group.example_mysql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
| [aws_db_parameter_group.example_mysql8](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
| [aws_db_parameter_group.example_postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
| [aws_db_parameter_group.example_postgresql13](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
| [aws_rds_cluster_parameter_group.example_mysql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
| [aws_rds_cluster_parameter_group.example_mysql8](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
| [aws_rds_cluster_parameter_group.example_postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
| [aws_rds_cluster_parameter_group.example_postgresql13](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
| [aws_rds_engine_version.postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/rds_engine_version) | data source |
Expand All @@ -57,6 +60,26 @@ No inputs.

| Name | Description |
|------|-------------|
| <a name="output_aurora_mysql_serverlessv2_additional_cluster_endpoints"></a> [aurora\_mysql\_serverlessv2\_additional\_cluster\_endpoints](#output\_aurora\_mysql\_serverlessv2\_additional\_cluster\_endpoints) | A map of additional cluster endpoints and their attributes |
| <a name="output_aurora_mysql_serverlessv2_cluster_arn"></a> [aurora\_mysql\_serverlessv2\_cluster\_arn](#output\_aurora\_mysql\_serverlessv2\_cluster\_arn) | Amazon Resource Name (ARN) of cluster |
| <a name="output_aurora_mysql_serverlessv2_cluster_database_name"></a> [aurora\_mysql\_serverlessv2\_cluster\_database\_name](#output\_aurora\_mysql\_serverlessv2\_cluster\_database\_name) | Name for an automatically created database on cluster creation |
| <a name="output_aurora_mysql_serverlessv2_cluster_endpoint"></a> [aurora\_mysql\_serverlessv2\_cluster\_endpoint](#output\_aurora\_mysql\_serverlessv2\_cluster\_endpoint) | Writer endpoint for the cluster |
| <a name="output_aurora_mysql_serverlessv2_cluster_engine_version_actual"></a> [aurora\_mysql\_serverlessv2\_cluster\_engine\_version\_actual](#output\_aurora\_mysql\_serverlessv2\_cluster\_engine\_version\_actual) | The running version of the cluster database |
| <a name="output_aurora_mysql_serverlessv2_cluster_hosted_zone_id"></a> [aurora\_mysql\_serverlessv2\_cluster\_hosted\_zone\_id](#output\_aurora\_mysql\_serverlessv2\_cluster\_hosted\_zone\_id) | The Route53 Hosted Zone ID of the endpoint |
| <a name="output_aurora_mysql_serverlessv2_cluster_id"></a> [aurora\_mysql\_serverlessv2\_cluster\_id](#output\_aurora\_mysql\_serverlessv2\_cluster\_id) | The RDS Cluster Identifier |
| <a name="output_aurora_mysql_serverlessv2_cluster_instances"></a> [aurora\_mysql\_serverlessv2\_cluster\_instances](#output\_aurora\_mysql\_serverlessv2\_cluster\_instances) | A map of cluster instances and their attributes |
| <a name="output_aurora_mysql_serverlessv2_cluster_master_password"></a> [aurora\_mysql\_serverlessv2\_cluster\_master\_password](#output\_aurora\_mysql\_serverlessv2\_cluster\_master\_password) | The database master password |
| <a name="output_aurora_mysql_serverlessv2_cluster_master_username"></a> [aurora\_mysql\_serverlessv2\_cluster\_master\_username](#output\_aurora\_mysql\_serverlessv2\_cluster\_master\_username) | The database master username |
| <a name="output_aurora_mysql_serverlessv2_cluster_members"></a> [aurora\_mysql\_serverlessv2\_cluster\_members](#output\_aurora\_mysql\_serverlessv2\_cluster\_members) | List of RDS Instances that are a part of this cluster |
| <a name="output_aurora_mysql_serverlessv2_cluster_port"></a> [aurora\_mysql\_serverlessv2\_cluster\_port](#output\_aurora\_mysql\_serverlessv2\_cluster\_port) | The database port |
| <a name="output_aurora_mysql_serverlessv2_cluster_reader_endpoint"></a> [aurora\_mysql\_serverlessv2\_cluster\_reader\_endpoint](#output\_aurora\_mysql\_serverlessv2\_cluster\_reader\_endpoint) | A read-only endpoint for the cluster, automatically load-balanced across replicas |
| <a name="output_aurora_mysql_serverlessv2_cluster_resource_id"></a> [aurora\_mysql\_serverlessv2\_cluster\_resource\_id](#output\_aurora\_mysql\_serverlessv2\_cluster\_resource\_id) | The RDS Cluster Resource ID |
| <a name="output_aurora_mysql_serverlessv2_cluster_role_associations"></a> [aurora\_mysql\_serverlessv2\_cluster\_role\_associations](#output\_aurora\_mysql\_serverlessv2\_cluster\_role\_associations) | A map of IAM roles associated with the cluster and their attributes |
| <a name="output_aurora_mysql_serverlessv2_db_subnet_group_name"></a> [aurora\_mysql\_serverlessv2\_db\_subnet\_group\_name](#output\_aurora\_mysql\_serverlessv2\_db\_subnet\_group\_name) | The db subnet group name |
| <a name="output_aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_arn"></a> [aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_arn](#output\_aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_arn) | The Amazon Resource Name (ARN) specifying the enhanced monitoring role |
| <a name="output_aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_name"></a> [aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_name](#output\_aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_name) | The name of the enhanced monitoring role |
| <a name="output_aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_unique_id"></a> [aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_unique\_id](#output\_aurora\_mysql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_unique\_id) | Stable and unique string identifying the enhanced monitoring role |
| <a name="output_aurora_mysql_serverlessv2_security_group_id"></a> [aurora\_mysql\_serverlessv2\_security\_group\_id](#output\_aurora\_mysql\_serverlessv2\_security\_group\_id) | The security group ID of the cluster |
| <a name="output_aurora_postgresql_serverlessv2_additional_cluster_endpoints"></a> [aurora\_postgresql\_serverlessv2\_additional\_cluster\_endpoints](#output\_aurora\_postgresql\_serverlessv2\_additional\_cluster\_endpoints) | A map of additional cluster endpoints and their attributes |
| <a name="output_aurora_postgresql_serverlessv2_cluster_arn"></a> [aurora\_postgresql\_serverlessv2\_cluster\_arn](#output\_aurora\_postgresql\_serverlessv2\_cluster\_arn) | Amazon Resource Name (ARN) of cluster |
| <a name="output_aurora_postgresql_serverlessv2_cluster_database_name"></a> [aurora\_postgresql\_serverlessv2\_cluster\_database\_name](#output\_aurora\_postgresql\_serverlessv2\_cluster\_database\_name) | Name for an automatically created database on cluster creation |
Expand Down
97 changes: 75 additions & 22 deletions examples/serverless/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,6 @@ locals {
}
}

################################################################################
# Supporting Resources
################################################################################

module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 3.0"

name = local.name
cidr = "10.99.0.0/18"

azs = ["${local.region}a", "${local.region}b", "${local.region}c"]
public_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"]
private_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"]
database_subnets = ["10.99.7.0/24", "10.99.8.0/24", "10.99.9.0/24"]

enable_nat_gateway = false # Disabled NAT to be able to run this example quicker

tags = local.tags
}

################################################################################
# RDS Aurora Module - PostgreSQL
################################################################################
Expand Down Expand Up @@ -130,6 +109,58 @@ resource "aws_rds_cluster_parameter_group" "example_mysql" {
tags = local.tags
}

################################################################################
# RDS Aurora Module - MySQL Serverless V2
################################################################################

module "aurora_mysql_serverlessv2" {
source = "../../"

name = "${local.name}-mysqlv2"
engine = "aurora-mysql"
engine_mode = "provisioned"
engine_version = "8.0.mysql_aurora.3.02.0"
storage_encrypted = true

vpc_id = module.vpc.vpc_id
subnets = module.vpc.database_subnets
create_security_group = true
allowed_cidr_blocks = module.vpc.private_subnets_cidr_blocks

monitoring_interval = 60

apply_immediately = true
skip_final_snapshot = true

db_parameter_group_name = aws_db_parameter_group.example_mysql8.id
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.example_mysql8.id

serverlessv2_scaling_configuration = {
min_capacity = 2
max_capacity = 10
}

instance_class = "db.serverless"
instances = {
one = {}
two = {}
}
}

resource "aws_db_parameter_group" "example_mysql8" {
name = "${local.name}-aurora-db-mysql8-parameter-group"
family = "aurora-mysql8.0"
description = "${local.name}-aurora-db-mysql8-parameter-group"
tags = local.tags
}

resource "aws_rds_cluster_parameter_group" "example_mysql8" {
name = "${local.name}-aurora-mysql8-cluster-parameter-group"
family = "aurora-mysql8.0"
description = "${local.name}-aurora-mysql8-cluster-parameter-group"
tags = local.tags
}

################################################################################
# RDS Aurora Module - PostgreSQL Serverless V2
################################################################################
Expand All @@ -140,7 +171,8 @@ data "aws_rds_engine_version" "postgresql" {
}

module "aurora_postgresql_serverlessv2" {
source = "../../"
source = "../../"

name = "${local.name}-postgresqlv2"
engine = data.aws_rds_engine_version.postgresql.engine
engine_mode = "provisioned"
Expand Down Expand Up @@ -185,3 +217,24 @@ resource "aws_rds_cluster_parameter_group" "example_postgresql13" {
description = "${local.name}-aurora-postgres13-cluster-parameter-group"
tags = local.tags
}

################################################################################
# Supporting Resources
################################################################################

module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 3.0"

name = local.name
cidr = "10.99.0.0/18"

azs = ["${local.region}a", "${local.region}b", "${local.region}c"]
public_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"]
private_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"]
database_subnets = ["10.99.7.0/24", "10.99.8.0/24", "10.99.9.0/24"]

enable_nat_gateway = false # Disabled NAT to be able to run this example quicker

tags = local.tags
}
115 changes: 115 additions & 0 deletions examples/serverless/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,121 @@ output "mysql_security_group_id" {
value = module.aurora_mysql.security_group_id
}


################################################################################
# RDS Aurora Module - MySQL Serverless V2
################################################################################

# aws_db_subnet_group
output "aurora_mysql_serverlessv2_db_subnet_group_name" {
description = "The db subnet group name"
value = module.aurora_mysql_serverlessv2.db_subnet_group_name
}

# aws_rds_cluster
output "aurora_mysql_serverlessv2_cluster_arn" {
description = "Amazon Resource Name (ARN) of cluster"
value = module.aurora_mysql_serverlessv2.cluster_arn
}

output "aurora_mysql_serverlessv2_cluster_id" {
description = "The RDS Cluster Identifier"
value = module.aurora_mysql_serverlessv2.cluster_id
}

output "aurora_mysql_serverlessv2_cluster_resource_id" {
description = "The RDS Cluster Resource ID"
value = module.aurora_mysql_serverlessv2.cluster_resource_id
}

output "aurora_mysql_serverlessv2_cluster_members" {
description = "List of RDS Instances that are a part of this cluster"
value = module.aurora_mysql_serverlessv2.cluster_members
}

output "aurora_mysql_serverlessv2_cluster_endpoint" {
description = "Writer endpoint for the cluster"
value = module.aurora_mysql_serverlessv2.cluster_endpoint
}

output "aurora_mysql_serverlessv2_cluster_reader_endpoint" {
description = "A read-only endpoint for the cluster, automatically load-balanced across replicas"
value = module.aurora_mysql_serverlessv2.cluster_reader_endpoint
}

output "aurora_mysql_serverlessv2_cluster_engine_version_actual" {
description = "The running version of the cluster database"
value = module.aurora_mysql_serverlessv2.cluster_engine_version_actual
}

# database_name is not set on `aws_rds_cluster` resource if it was not specified, so can't be used in output
output "aurora_mysql_serverlessv2_cluster_database_name" {
description = "Name for an automatically created database on cluster creation"
value = module.aurora_mysql_serverlessv2.cluster_database_name
}

output "aurora_mysql_serverlessv2_cluster_port" {
description = "The database port"
value = module.aurora_mysql_serverlessv2.cluster_port
}

output "aurora_mysql_serverlessv2_cluster_master_password" {
description = "The database master password"
value = module.aurora_mysql_serverlessv2.cluster_master_password
sensitive = true
}

output "aurora_mysql_serverlessv2_cluster_master_username" {
description = "The database master username"
value = module.aurora_mysql_serverlessv2.cluster_master_username
sensitive = true
}

output "aurora_mysql_serverlessv2_cluster_hosted_zone_id" {
description = "The Route53 Hosted Zone ID of the endpoint"
value = module.aurora_mysql_serverlessv2.cluster_hosted_zone_id
}

# aws_rds_cluster_instances
output "aurora_mysql_serverlessv2_cluster_instances" {
description = "A map of cluster instances and their attributes"
value = module.aurora_mysql_serverlessv2.cluster_instances
}

# aws_rds_cluster_endpoint
output "aurora_mysql_serverlessv2_additional_cluster_endpoints" {
description = "A map of additional cluster endpoints and their attributes"
value = module.aurora_mysql_serverlessv2.additional_cluster_endpoints
}

# aws_rds_cluster_role_association
output "aurora_mysql_serverlessv2_cluster_role_associations" {
description = "A map of IAM roles associated with the cluster and their attributes"
value = module.aurora_mysql_serverlessv2.cluster_role_associations
}

# Enhanced monitoring role
output "aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_name" {
description = "The name of the enhanced monitoring role"
value = module.aurora_mysql_serverlessv2.enhanced_monitoring_iam_role_name
}

output "aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_arn" {
description = "The Amazon Resource Name (ARN) specifying the enhanced monitoring role"
value = module.aurora_mysql_serverlessv2.enhanced_monitoring_iam_role_arn
}

output "aurora_mysql_serverlessv2_enhanced_monitoring_iam_role_unique_id" {
description = "Stable and unique string identifying the enhanced monitoring role"
value = module.aurora_mysql_serverlessv2.enhanced_monitoring_iam_role_unique_id
}

# aws_security_group
output "aurora_mysql_serverlessv2_security_group_id" {
description = "The security group ID of the cluster"
value = module.aurora_mysql_serverlessv2.security_group_id
}

################################################################################
# RDS Aurora Module - PostgreSQL Serverless V2
################################################################################
Expand Down

0 comments on commit 0390b59

Please sign in to comment.