Skip to content

Commit 6ca7c70

Browse files
authored
feat!: Added support for ServerlessV2 and updated AWS provider to v4.12+ (#288)
1 parent b8a3006 commit 6ca7c70

File tree

11 files changed

+224
-13
lines changed

11 files changed

+224
-13
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.64.0
3+
rev: v1.70.1
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_validate
@@ -23,7 +23,7 @@ repos:
2323
- '--args=--only=terraform_standard_module_structure'
2424
- '--args=--only=terraform_workspace_remote'
2525
- repo: https://github.com/pre-commit/pre-commit-hooks
26-
rev: v4.1.0
26+
rev: v4.2.0
2727
hooks:
2828
- id: check-merge-conflict
2929
- id: end-of-file-fixer

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Terraform module which creates AWS RDS Aurora resources.
99
- Autoscaling of read-replicas
1010
- Global cluster
1111
- Enhanced monitoring
12-
- Serverless cluster
12+
- Serverless cluster (v1 and v2)
1313
- Import from S3
1414
- Fine grained control of individual cluster instances
1515
- Custom endpoints
@@ -211,7 +211,7 @@ module "cluster" {
211211
- [MySQL](https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/mysql): A simple MySQL cluster
212212
- [PostgreSQL](https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/postgresql): A simple PostgreSQL cluster
213213
- [S3 Import](https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/s3_import): A MySQL cluster created from a Percona Xtrabackup stored in S3
214-
- [Serverless](https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/serverless): Serverless PostgreSQL and MySQL clusters
214+
- [Serverless](https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/serverless): Serverless V1 and V2 (PostgreSQL and MySQL)
215215

216216
## Documentation
217217

@@ -223,14 +223,14 @@ Terraform documentation is generated automatically using [pre-commit hooks](http
223223
| Name | Version |
224224
|------|---------|
225225
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
226-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.63 |
226+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.12 |
227227
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 2.2 |
228228

229229
## Providers
230230

231231
| Name | Version |
232232
|------|---------|
233-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.63 |
233+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.12 |
234234
| <a name="provider_random"></a> [random](#provider\_random) | >= 2.2 |
235235

236236
## Modules
@@ -339,6 +339,7 @@ No modules.
339339
| <a name="input_security_group_description"></a> [security\_group\_description](#input\_security\_group\_description) | The description of the security group. If value is set to empty string it will contain cluster name in the description | `string` | `null` | no |
340340
| <a name="input_security_group_egress_rules"></a> [security\_group\_egress\_rules](#input\_security\_group\_egress\_rules) | A map of security group egress rule defintions to add to the security group created | `map(any)` | `{}` | no |
341341
| <a name="input_security_group_tags"></a> [security\_group\_tags](#input\_security\_group\_tags) | Additional tags for the security group | `map(string)` | `{}` | no |
342+
| <a name="input_serverlessv2_scaling_configuration"></a> [serverlessv2\_scaling\_configuration](#input\_serverlessv2\_scaling\_configuration) | Map of nested attributes with serverless v2 scaling properties. Only valid when `engine_mode` is set to `provisioned` | `map(string)` | `{}` | no |
342343
| <a name="input_skip_final_snapshot"></a> [skip\_final\_snapshot](#input\_skip\_final\_snapshot) | Determines whether a final snapshot is created before the cluster is deleted. If true is specified, no snapshot is created | `bool` | `null` | no |
343344
| <a name="input_snapshot_identifier"></a> [snapshot\_identifier](#input\_snapshot\_identifier) | Specifies whether or not to create this cluster from a snapshot. You can use either the name or ARN when specifying a DB cluster snapshot, or the ARN when specifying a DB snapshot | `string` | `null` | no |
344345
| <a name="input_source_region"></a> [source\_region](#input\_source\_region) | The source region for an encrypted replica DB cluster | `string` | `null` | no |

examples/s3_import/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Note that this example may create resources which cost money. Run `terraform des
6464
| Name | Source | Version |
6565
|------|--------|---------|
6666
| <a name="module_aurora"></a> [aurora](#module\_aurora) | ../../ | n/a |
67-
| <a name="module_import_s3_bucket"></a> [import\_s3\_bucket](#module\_import\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 2.0 |
67+
| <a name="module_import_s3_bucket"></a> [import\_s3\_bucket](#module\_import\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |
6868
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 3.0 |
6969

7070
## Resources

examples/s3_import/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ module "vpc" {
3939

4040
module "import_s3_bucket" {
4141
source = "terraform-aws-modules/s3-bucket/aws"
42-
version = "~> 2.0"
42+
version = "~> 3.0"
4343

4444
bucket = "${local.name}-${random_pet.this.id}"
4545
acl = "private"

examples/serverless/README.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Serverless Example
22

3-
Configuration in this directory creates Aurora serverless clusters for both PostgreSQL and MySQL.
3+
Configuration in this directory creates Aurora serverless clusters for both Serverless V1 (PostgreSQL, MySQL), and Serverless V2 (PostgreSQL).
44

55
## Usage
66

@@ -20,20 +20,21 @@ Note that this example may create resources which cost money. Run `terraform des
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.63 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.12.0 |
2424

2525
## Providers
2626

2727
| Name | Version |
2828
|------|---------|
29-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.63 |
29+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.12.0 |
3030

3131
## Modules
3232

3333
| Name | Source | Version |
3434
|------|--------|---------|
3535
| <a name="module_aurora_mysql"></a> [aurora\_mysql](#module\_aurora\_mysql) | ../../ | n/a |
3636
| <a name="module_aurora_postgresql"></a> [aurora\_postgresql](#module\_aurora\_postgresql) | ../../ | n/a |
37+
| <a name="module_aurora_postgresql_serverlessv2"></a> [aurora\_postgresql\_serverlessv2](#module\_aurora\_postgresql\_serverlessv2) | ../../ | n/a |
3738
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 3.0 |
3839

3940
## Resources
@@ -42,8 +43,11 @@ Note that this example may create resources which cost money. Run `terraform des
4243
|------|------|
4344
| [aws_db_parameter_group.example_mysql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
4445
| [aws_db_parameter_group.example_postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
46+
| [aws_db_parameter_group.example_postgresql13](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |
4547
| [aws_rds_cluster_parameter_group.example_mysql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
4648
| [aws_rds_cluster_parameter_group.example_postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
49+
| [aws_rds_cluster_parameter_group.example_postgresql13](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |
50+
| [aws_rds_engine_version.postgresql](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/rds_engine_version) | data source |
4751

4852
## Inputs
4953

@@ -53,6 +57,26 @@ No inputs.
5357

5458
| Name | Description |
5559
|------|-------------|
60+
| <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 |
61+
| <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 |
62+
| <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 |
63+
| <a name="output_aurora_postgresql_serverlessv2_cluster_endpoint"></a> [aurora\_postgresql\_serverlessv2\_cluster\_endpoint](#output\_aurora\_postgresql\_serverlessv2\_cluster\_endpoint) | Writer endpoint for the cluster |
64+
| <a name="output_aurora_postgresql_serverlessv2_cluster_engine_version_actual"></a> [aurora\_postgresql\_serverlessv2\_cluster\_engine\_version\_actual](#output\_aurora\_postgresql\_serverlessv2\_cluster\_engine\_version\_actual) | The running version of the cluster database |
65+
| <a name="output_aurora_postgresql_serverlessv2_cluster_hosted_zone_id"></a> [aurora\_postgresql\_serverlessv2\_cluster\_hosted\_zone\_id](#output\_aurora\_postgresql\_serverlessv2\_cluster\_hosted\_zone\_id) | The Route53 Hosted Zone ID of the endpoint |
66+
| <a name="output_aurora_postgresql_serverlessv2_cluster_id"></a> [aurora\_postgresql\_serverlessv2\_cluster\_id](#output\_aurora\_postgresql\_serverlessv2\_cluster\_id) | The RDS Cluster Identifier |
67+
| <a name="output_aurora_postgresql_serverlessv2_cluster_instances"></a> [aurora\_postgresql\_serverlessv2\_cluster\_instances](#output\_aurora\_postgresql\_serverlessv2\_cluster\_instances) | A map of cluster instances and their attributes |
68+
| <a name="output_aurora_postgresql_serverlessv2_cluster_master_password"></a> [aurora\_postgresql\_serverlessv2\_cluster\_master\_password](#output\_aurora\_postgresql\_serverlessv2\_cluster\_master\_password) | The database master password |
69+
| <a name="output_aurora_postgresql_serverlessv2_cluster_master_username"></a> [aurora\_postgresql\_serverlessv2\_cluster\_master\_username](#output\_aurora\_postgresql\_serverlessv2\_cluster\_master\_username) | The database master username |
70+
| <a name="output_aurora_postgresql_serverlessv2_cluster_members"></a> [aurora\_postgresql\_serverlessv2\_cluster\_members](#output\_aurora\_postgresql\_serverlessv2\_cluster\_members) | List of RDS Instances that are a part of this cluster |
71+
| <a name="output_aurora_postgresql_serverlessv2_cluster_port"></a> [aurora\_postgresql\_serverlessv2\_cluster\_port](#output\_aurora\_postgresql\_serverlessv2\_cluster\_port) | The database port |
72+
| <a name="output_aurora_postgresql_serverlessv2_cluster_reader_endpoint"></a> [aurora\_postgresql\_serverlessv2\_cluster\_reader\_endpoint](#output\_aurora\_postgresql\_serverlessv2\_cluster\_reader\_endpoint) | A read-only endpoint for the cluster, automatically load-balanced across replicas |
73+
| <a name="output_aurora_postgresql_serverlessv2_cluster_resource_id"></a> [aurora\_postgresql\_serverlessv2\_cluster\_resource\_id](#output\_aurora\_postgresql\_serverlessv2\_cluster\_resource\_id) | The RDS Cluster Resource ID |
74+
| <a name="output_aurora_postgresql_serverlessv2_cluster_role_associations"></a> [aurora\_postgresql\_serverlessv2\_cluster\_role\_associations](#output\_aurora\_postgresql\_serverlessv2\_cluster\_role\_associations) | A map of IAM roles associated with the cluster and their attributes |
75+
| <a name="output_aurora_postgresql_serverlessv2_db_subnet_group_name"></a> [aurora\_postgresql\_serverlessv2\_db\_subnet\_group\_name](#output\_aurora\_postgresql\_serverlessv2\_db\_subnet\_group\_name) | The db subnet group name |
76+
| <a name="output_aurora_postgresql_serverlessv2_enhanced_monitoring_iam_role_arn"></a> [aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_arn](#output\_aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_arn) | The Amazon Resource Name (ARN) specifying the enhanced monitoring role |
77+
| <a name="output_aurora_postgresql_serverlessv2_enhanced_monitoring_iam_role_name"></a> [aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_name](#output\_aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_name) | The name of the enhanced monitoring role |
78+
| <a name="output_aurora_postgresql_serverlessv2_enhanced_monitoring_iam_role_unique_id"></a> [aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_unique\_id](#output\_aurora\_postgresql\_serverlessv2\_enhanced\_monitoring\_iam\_role\_unique\_id) | Stable and unique string identifying the enhanced monitoring role |
79+
| <a name="output_aurora_postgresql_serverlessv2_security_group_id"></a> [aurora\_postgresql\_serverlessv2\_security\_group\_id](#output\_aurora\_postgresql\_serverlessv2\_security\_group\_id) | The security group ID of the cluster |
5680
| <a name="output_mysql_additional_cluster_endpoints"></a> [mysql\_additional\_cluster\_endpoints](#output\_mysql\_additional\_cluster\_endpoints) | A map of additional cluster endpoints and their attributes |
5781
| <a name="output_mysql_cluster_arn"></a> [mysql\_cluster\_arn](#output\_mysql\_cluster\_arn) | Amazon Resource Name (ARN) of cluster |
5882
| <a name="output_mysql_cluster_database_name"></a> [mysql\_cluster\_database\_name](#output\_mysql\_cluster\_database\_name) | Name for an automatically created database on cluster creation |

examples/serverless/main.tf

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ module "vpc" {
2727
private_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"]
2828
database_subnets = ["10.99.7.0/24", "10.99.8.0/24", "10.99.9.0/24"]
2929

30+
enable_nat_gateway = false # Disabled NAT to be able to run this example quicker
31+
3032
tags = local.tags
3133
}
3234

@@ -127,3 +129,59 @@ resource "aws_rds_cluster_parameter_group" "example_mysql" {
127129
description = "${local.name}-aurora-mysql-cluster-parameter-group"
128130
tags = local.tags
129131
}
132+
133+
################################################################################
134+
# RDS Aurora Module - PostgreSQL Serverless V2
135+
################################################################################
136+
137+
data "aws_rds_engine_version" "postgresql" {
138+
engine = "aurora-postgresql"
139+
version = "13.6"
140+
}
141+
142+
module "aurora_postgresql_serverlessv2" {
143+
source = "../../"
144+
name = "${local.name}-postgresqlv2"
145+
engine = data.aws_rds_engine_version.postgresql.engine
146+
engine_mode = "provisioned"
147+
engine_version = data.aws_rds_engine_version.postgresql.version
148+
storage_encrypted = true
149+
150+
vpc_id = module.vpc.vpc_id
151+
subnets = module.vpc.database_subnets
152+
create_security_group = true
153+
allowed_cidr_blocks = module.vpc.private_subnets_cidr_blocks
154+
155+
monitoring_interval = 60
156+
157+
apply_immediately = true
158+
skip_final_snapshot = true
159+
160+
db_parameter_group_name = aws_db_parameter_group.example_postgresql13.id
161+
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.example_postgresql13.id
162+
163+
serverlessv2_scaling_configuration = {
164+
min_capacity = 2
165+
max_capacity = 10
166+
}
167+
168+
instance_class = "db.serverless"
169+
instances = {
170+
one = {}
171+
two = {}
172+
}
173+
}
174+
175+
resource "aws_db_parameter_group" "example_postgresql13" {
176+
name = "${local.name}-aurora-db-postgres13-parameter-group"
177+
family = "aurora-postgresql13"
178+
description = "${local.name}-aurora-db-postgres13-parameter-group"
179+
tags = local.tags
180+
}
181+
182+
resource "aws_rds_cluster_parameter_group" "example_postgresql13" {
183+
name = "${local.name}-aurora-postgres13-cluster-parameter-group"
184+
family = "aurora-postgresql13"
185+
description = "${local.name}-aurora-postgres13-cluster-parameter-group"
186+
tags = local.tags
187+
}

0 commit comments

Comments
 (0)