From ce820cce0b88a3afb32bb1197d783356ec316768 Mon Sep 17 00:00:00 2001 From: magreenbaum Date: Mon, 23 Dec 2024 07:23:02 -0500 Subject: [PATCH 1/5] multi region cluster --- README.md | 5 +- examples/complete/README.md | 4 +- examples/complete/versions.tf | 2 +- examples/multi-region/main.tf | 240 ++++++++++++++++++++++ examples/multi-region/outputs.tf | 0 examples/multi-region/variables.tf | 0 examples/multi-region/versions.tf | 14 ++ examples/valkey/README.md | 4 +- examples/valkey/versions.tf | 2 +- main.tf | 1 + modules/multi-region-cluster/README.md | 0 modules/multi-region-cluster/main.tf | 21 ++ modules/multi-region-cluster/outputs.tf | 9 + modules/multi-region-cluster/variables.tf | 65 ++++++ modules/multi-region-cluster/versions.tf | 10 + variables.tf | 6 + versions.tf | 2 +- 17 files changed, 376 insertions(+), 9 deletions(-) create mode 100644 examples/multi-region/main.tf create mode 100644 examples/multi-region/outputs.tf create mode 100644 examples/multi-region/variables.tf create mode 100644 examples/multi-region/versions.tf create mode 100644 modules/multi-region-cluster/README.md create mode 100644 modules/multi-region-cluster/main.tf create mode 100644 modules/multi-region-cluster/outputs.tf create mode 100644 modules/multi-region-cluster/variables.tf create mode 100644 modules/multi-region-cluster/versions.tf diff --git a/README.md b/README.md index 1d5d4e5..5c9133f 100644 --- a/README.md +++ b/README.md @@ -119,13 +119,13 @@ Examples codified under the [`examples`](https://github.com/terraform-aws-module | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 5.78 | +| [aws](#requirement\_aws) | >= 5.82 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 5.78 | +| [aws](#provider\_aws) | >= 5.82 | ## Modules @@ -162,6 +162,7 @@ No modules. | [final\_snapshot\_name](#input\_final\_snapshot\_name) | Name of the final cluster snapshot to be created when this resource is deleted. If omitted, no final snapshot will be made | `string` | `null` | no | | [kms\_key\_arn](#input\_kms\_key\_arn) | ARN of the KMS key used to encrypt the cluster at rest | `string` | `null` | no | | [maintenance\_window](#input\_maintenance\_window) | Specifies the weekly time range during which maintenance on the cluster is performed. It is specified as a range in the format `ddd:hh24:mi-ddd:hh24:mi` | `string` | `null` | no | +| [multi\_region\_cluster\_name](#input\_multi\_region\_cluster\_name) | The multi region cluster identifier if part of a multi region cluster | `string` | `null` | no | | [name](#input\_name) | Cluster name - also default name used on all resources if more specific resource names are not provided | `string` | `""` | no | | [node\_type](#input\_node\_type) | The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html) | `string` | `null` | no | | [num\_replicas\_per\_shard](#input\_num\_replicas\_per\_shard) | The number of replicas to apply to each shard, up to a maximum of 5. Defaults to `1` (i.e. 2 nodes per shard) | `number` | `null` | no | diff --git a/examples/complete/README.md b/examples/complete/README.md index a3e9abe..8819970 100644 --- a/examples/complete/README.md +++ b/examples/complete/README.md @@ -26,14 +26,14 @@ Note that this example may create resources which will incur monetary charges on | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 5.78 | +| [aws](#requirement\_aws) | >= 5.82 | | [random](#requirement\_random) | >= 3.0 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 5.78 | +| [aws](#provider\_aws) | >= 5.82 | | [random](#provider\_random) | >= 3.0 | ## Modules diff --git a/examples/complete/versions.tf b/examples/complete/versions.tf index 428fd69..fdcf4dd 100644 --- a/examples/complete/versions.tf +++ b/examples/complete/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 5.78" + version = ">= 5.82" } random = { source = "hashicorp/random" diff --git a/examples/multi-region/main.tf b/examples/multi-region/main.tf new file mode 100644 index 0000000..31c1787 --- /dev/null +++ b/examples/multi-region/main.tf @@ -0,0 +1,240 @@ +provider "aws" { + region = local.region +} + +provider "aws" { + region = "us-west-2" + alias = "us-west-2" +} + +locals { + region = "us-east-1" + name = "memorydb-ex-${replace(basename(path.cwd), "_", "-")}" + + tags = { + Example = local.name + Environment = "dev" + } +} + +################################################################################ +# MemoryDB Module +################################################################################ + +module "memory_db_disabled" { + source = "../.." + + name = "${local.name}-disabled" + create = false +} + +module "multi_region_cluster" { + source = "../../modules/multi-region-cluster" + + create = true + multi_region_cluster_name_suffix = local.name + tls_enabled = true + engine = "valkey" + engine_version = "7.3" + node_type = "db.r7g.xlarge" + num_shards = 2 +} + + +module "memory_db" { + source = "../.." + + # Cluster + name = local.name + description = "Example MemoryDB cluster" + + # This makes it part of the multi region cluster + multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name + + # engine = "valkey" + # engine_version = "7.3" + auto_minor_version_upgrade = true + node_type = "db.r7g.xlarge" + num_shards = 2 + num_replicas_per_shard = 2 + + # tls_enabled = true + security_group_ids = [module.security_group.security_group_id] + maintenance_window = "sun:23:00-mon:01:30" + snapshot_retention_limit = 7 + snapshot_window = "05:00-09:00" + + # Users + users = { + admin = { + user_name = "admin-user" + access_string = "on ~* &* +@all" + type = "iam" + tags = { user = "admin" } + } + readonly = { + user_name = "readonly-user" + access_string = "on ~* &* -@all +@read" + passwords = [random_password.password.result] + tags = { user = "readonly" } + } + } + + # ACL + create_acl = false + acl_name = "${local.name}-acl" + acl_tags = { acl = "custom" } + + # Parameter group + create_parameter_group = false + + # Subnet group + subnet_group_name = "${local.name}-subnet-group" + subnet_group_description = "Example MemoryDB subnet group" + subnet_ids = module.vpc.database_subnets + subnet_group_tags = { + subnet_group = "custom" + } + + tags = local.tags +} + +module "secondary_memory_db" { + source = "../.." + + # Cluster + name = "${local.name}-secondary" + description = "Example MemoryDB cluster" + + # This makes it part of the multi region cluster + multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name + + # engine = "valkey" + # engine_version = "7.3" + auto_minor_version_upgrade = true + node_type = "db.r7g.xlarge" + num_shards = 2 + num_replicas_per_shard = 2 + + # tls_enabled = true + security_group_ids = [module.secondary_security_group.security_group_id] + maintenance_window = "sun:23:00-mon:01:30" + snapshot_retention_limit = 7 + snapshot_window = "05:00-09:00" + + # ACL + create_acl = false + acl_name = "${local.name}-acl" + acl_tags = { acl = "custom" } + + # Parameter group + create_parameter_group = false + + # Subnet group + subnet_group_name = "${local.name}-subnet-group" + subnet_group_description = "Example MemoryDB subnet group" + subnet_ids = module.secondary_vpc.database_subnets + subnet_group_tags = { + subnet_group = "custom" + } + + tags = local.tags + + providers = { + aws = aws.us-west-2 + } +} + +################################################################################ +# Supporting Resources +################################################################################ + +module "vpc" { + source = "terraform-aws-modules/vpc/aws" + version = "~> 5.0" + + name = local.name + cidr = "10.99.0.0/18" + + azs = ["${local.region}a", "${local.region}b", "${local.region}d"] # Caution: check which zones are available + private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] + database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] + + create_database_subnet_group = true + enable_nat_gateway = false + + manage_default_security_group = true + default_security_group_ingress = [] + default_security_group_egress = [] + + tags = local.tags +} + +module "secondary_vpc" { + source = "terraform-aws-modules/vpc/aws" + version = "~> 5.0" + + name = local.name + cidr = "10.99.0.0/18" + + azs = ["us-west-2a", "us-west-2b", "us-west-2d"] # Caution: check which zones are available + private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] + database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] + + create_database_subnet_group = true + enable_nat_gateway = false + + manage_default_security_group = true + default_security_group_ingress = [] + default_security_group_egress = [] + + tags = local.tags + + providers = { + aws = aws.us-west-2 + } +} + +module "security_group" { + source = "terraform-aws-modules/security-group/aws" + version = "~> 4.0" + + name = local.name + description = "Security group for ${local.name}" + vpc_id = module.vpc.vpc_id + + ingress_cidr_blocks = module.vpc.private_subnets_cidr_blocks + ingress_rules = ["redis-tcp"] + + egress_cidr_blocks = [module.vpc.vpc_cidr_block] + egress_rules = ["all-all"] + + tags = local.tags +} + +module "secondary_security_group" { + source = "terraform-aws-modules/security-group/aws" + version = "~> 4.0" + + name = local.name + description = "Security group for ${local.name}" + vpc_id = module.secondary_vpc.vpc_id + + ingress_cidr_blocks = module.secondary_vpc.private_subnets_cidr_blocks + ingress_rules = ["redis-tcp"] + + egress_cidr_blocks = [module.secondary_vpc.vpc_cidr_block] + egress_rules = ["all-all"] + + tags = local.tags + + providers = { + aws = aws.us-west-2 + } +} + +resource "random_password" "password" { + length = 16 + special = true + override_special = "_%@" +} diff --git a/examples/multi-region/outputs.tf b/examples/multi-region/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/examples/multi-region/variables.tf b/examples/multi-region/variables.tf new file mode 100644 index 0000000..e69de29 diff --git a/examples/multi-region/versions.tf b/examples/multi-region/versions.tf new file mode 100644 index 0000000..f321667 --- /dev/null +++ b/examples/multi-region/versions.tf @@ -0,0 +1,14 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 5.82" + } + random = { + source = "hashicorp/random" + version = ">= 3.0" + } + } +} diff --git a/examples/valkey/README.md b/examples/valkey/README.md index bbd951b..2ec6daf 100644 --- a/examples/valkey/README.md +++ b/examples/valkey/README.md @@ -26,14 +26,14 @@ Note that this example may create resources which will incur monetary charges on | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 5.78 | +| [aws](#requirement\_aws) | >= 5.82 | | [random](#requirement\_random) | >= 3.0 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 5.78 | +| [aws](#provider\_aws) | >= 5.82 | | [random](#provider\_random) | >= 3.0 | ## Modules diff --git a/examples/valkey/versions.tf b/examples/valkey/versions.tf index 428fd69..fdcf4dd 100644 --- a/examples/valkey/versions.tf +++ b/examples/valkey/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 5.78" + version = ">= 5.82" } random = { source = "hashicorp/random" diff --git a/main.tf b/main.tf index 2c655f1..b9186aa 100644 --- a/main.tf +++ b/main.tf @@ -29,6 +29,7 @@ resource "aws_memorydb_cluster" "this" { num_replicas_per_shard = var.num_replicas_per_shard parameter_group_name = local.parameter_group_name data_tiering = var.data_tiering + multi_region_cluster_name = var.multi_region_cluster_name acl_name = local.acl_name kms_key_arn = var.kms_key_arn diff --git a/modules/multi-region-cluster/README.md b/modules/multi-region-cluster/README.md new file mode 100644 index 0000000..e69de29 diff --git a/modules/multi-region-cluster/main.tf b/modules/multi-region-cluster/main.tf new file mode 100644 index 0000000..3688271 --- /dev/null +++ b/modules/multi-region-cluster/main.tf @@ -0,0 +1,21 @@ +resource "aws_memorydb_multi_region_cluster" "this" { + count = var.create ? 1 : 0 + + multi_region_cluster_name_suffix = var.multi_region_cluster_name_suffix + node_type = var.node_type + + description = var.description + engine = var.engine + engine_version = var.engine_version + multi_region_parameter_group_name = var.multi_region_parameter_group_name + num_shards = var.num_shards + tls_enabled = var.tls_enabled + + tags = var.tags + + timeouts { + create = try(var.timeouts.create, "120m") + update = try(var.timeouts.update, "120m") + delete = try(var.timeouts.delete, "120m") + } +} diff --git a/modules/multi-region-cluster/outputs.tf b/modules/multi-region-cluster/outputs.tf new file mode 100644 index 0000000..6d45504 --- /dev/null +++ b/modules/multi-region-cluster/outputs.tf @@ -0,0 +1,9 @@ +output "multi_region_cluster_arn" { + description = "The ARN of the multi-region cluster" + value = try(aws_memorydb_multi_region_cluster.this[0].arn, null) +} + +output "multi_region_cluster_name" { + description = "The name of the multi-region cluster" + value = try(aws_memorydb_multi_region_cluster.this[0].multi_region_cluster_name, null) +} diff --git a/modules/multi-region-cluster/variables.tf b/modules/multi-region-cluster/variables.tf new file mode 100644 index 0000000..9a20d5c --- /dev/null +++ b/modules/multi-region-cluster/variables.tf @@ -0,0 +1,65 @@ +variable "create" { + description = "Determines whether resources will be created - affects all resources" + type = bool + default = true +} + +variable "tags" { + description = "A map of tags to use on all resources" + type = map(string) + default = {} +} + +variable "multi_region_cluster_name_suffix" { + description = "A suffix to be added to the multi-region cluster name. An AWS generated prefix is automatically applied to the multi-region cluster name when it is created" + type = string + default = null +} + +variable "multi_region_parameter_group_name" { + description = "The name of the multi-region parameter group to be associated with the cluster" + type = string + default = null +} + +variable "description" { + description = "Description for the cluster. Defaults to `Managed by Terraform`" + type = string + default = null +} + +variable "engine" { + description = "The engine that will run on your nodes. Supported values are redis and valkey" + type = string + default = null +} + +variable "engine_version" { + description = "Version number of the engine to be used for the cluster. Downgrades are not supported" + type = string + default = null +} + +variable "node_type" { + description = "The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html)" + type = string + default = null +} + +variable "num_shards" { + description = "The number of shards in the cluster. Defaults to `1`" + type = number + default = null +} + +variable "tls_enabled" { + description = "A flag to enable in-transit encryption on the cluster. When set to `false`, the `acl_name` must be `open-access`. Defaults to `true`" + type = bool + default = null +} + +variable "timeouts" { + description = "Define maximum timeout for creating, updating, and deleting memorydb resources" + type = map(string) + default = {} +} diff --git a/modules/multi-region-cluster/versions.tf b/modules/multi-region-cluster/versions.tf new file mode 100644 index 0000000..bdfd597 --- /dev/null +++ b/modules/multi-region-cluster/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 5.82" + } + } +} diff --git a/variables.tf b/variables.tf index 56ce4d0..53653d1 100644 --- a/variables.tf +++ b/variables.tf @@ -140,6 +140,12 @@ variable "data_tiering" { default = null } +variable "multi_region_cluster_name" { + description = "The multi region cluster identifier if part of a multi region cluster" + type = string + default = null +} + ################################################################################ # User(s) ################################################################################ diff --git a/versions.tf b/versions.tf index 99c199f..bdfd597 100644 --- a/versions.tf +++ b/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 5.78" + version = ">= 5.82" } } } From 8e9df2790cb195c1af556e2213b440c8ddd760c4 Mon Sep 17 00:00:00 2001 From: magreenbaum Date: Tue, 31 Dec 2024 14:44:32 -0500 Subject: [PATCH 2/5] updates --- examples/multi-region/README.md | 68 +++++++++ examples/multi-region/main.tf | 198 ++++++++++++------------- examples/multi-region/outputs.tf | 109 ++++++++++++++ modules/multi-region-cluster/README.md | 49 ++++++ 4 files changed, 324 insertions(+), 100 deletions(-) create mode 100644 examples/multi-region/README.md diff --git a/examples/multi-region/README.md b/examples/multi-region/README.md new file mode 100644 index 0000000..9e9127b --- /dev/null +++ b/examples/multi-region/README.md @@ -0,0 +1,68 @@ +# Multi Region cluster + +Configuration in this directory creates: + +- AWS Multi-Regional MemoryDB cluster +- AWS MemoryDB cluster +- AWS MemoryDB users +- AWS MemoryDB ACL +- AWS MemoryDB subnet group +- AWS MemoryDB parameter group + + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.0 | +| [aws](#requirement\_aws) | >= 5.82 | +| [random](#requirement\_random) | >= 3.0 | + +## Providers + +| Name | Version | +|------|---------| +| [random](#provider\_random) | >= 3.0 | + +## Modules + +| Name | Source | Version | +|------|--------|---------| +| [memory\_db](#module\_memory\_db) | ../.. | n/a | +| [memory\_db\_disabled](#module\_memory\_db\_disabled) | ../.. | n/a | +| [multi\_region\_cluster](#module\_multi\_region\_cluster) | ../../modules/multi-region-cluster | n/a | +| [security\_group](#module\_security\_group) | terraform-aws-modules/security-group/aws | ~> 4.0 | +| [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 5.0 | + +## Resources + +| Name | Type | +|------|------| +| [random_password.password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource | + +## Inputs + +No inputs. + +## Outputs + +| Name | Description | +|------|-------------| +| [acl\_arn](#output\_acl\_arn) | The ARN of the ACL | +| [acl\_id](#output\_acl\_id) | Name of the ACL | +| [acl\_minimum\_engine\_version](#output\_acl\_minimum\_engine\_version) | The minimum engine version supported by the ACL | +| [cluster\_arn](#output\_cluster\_arn) | The ARN of the cluster | +| [cluster\_endpoint\_address](#output\_cluster\_endpoint\_address) | DNS hostname of the cluster configuration endpoint | +| [cluster\_endpoint\_port](#output\_cluster\_endpoint\_port) | Port number that the cluster configuration endpoint is listening on | +| [cluster\_engine\_patch\_version](#output\_cluster\_engine\_patch\_version) | Patch version number of the Redis engine used by the cluster | +| [cluster\_id](#output\_cluster\_id) | Cluster name | +| [cluster\_shards](#output\_cluster\_shards) | Set of shards in this cluster | +| [multi\_region\_cluster\_arn](#output\_multi\_region\_cluster\_arn) | The ARN of the multi-region cluster | +| [multi\_region\_cluster\_name](#output\_multi\_region\_cluster\_name) | The name of the multi-region cluster | +| [parameter\_group\_arn](#output\_parameter\_group\_arn) | The ARN of the parameter group | +| [parameter\_group\_id](#output\_parameter\_group\_id) | Name of the parameter group | +| [subnet\_group\_arn](#output\_subnet\_group\_arn) | ARN of the subnet group | +| [subnet\_group\_id](#output\_subnet\_group\_id) | Name of the subnet group | +| [subnet\_group\_vpc\_id](#output\_subnet\_group\_vpc\_id) | The VPC in which the subnet group exists | +| [users](#output\_users) | Map of attributes for the users created | + diff --git a/examples/multi-region/main.tf b/examples/multi-region/main.tf index 31c1787..6613087 100644 --- a/examples/multi-region/main.tf +++ b/examples/multi-region/main.tf @@ -2,11 +2,6 @@ provider "aws" { region = local.region } -provider "aws" { - region = "us-west-2" - alias = "us-west-2" -} - locals { region = "us-east-1" name = "memorydb-ex-${replace(basename(path.cwd), "_", "-")}" @@ -51,14 +46,11 @@ module "memory_db" { # This makes it part of the multi region cluster multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name - # engine = "valkey" - # engine_version = "7.3" auto_minor_version_upgrade = true node_type = "db.r7g.xlarge" num_shards = 2 num_replicas_per_shard = 2 - # tls_enabled = true security_group_ids = [module.security_group.security_group_id] maintenance_window = "sun:23:00-mon:01:30" snapshot_retention_limit = 7 @@ -81,7 +73,7 @@ module "memory_db" { } # ACL - create_acl = false + create_acl = true acl_name = "${local.name}-acl" acl_tags = { acl = "custom" } @@ -99,51 +91,57 @@ module "memory_db" { tags = local.tags } -module "secondary_memory_db" { - source = "../.." - - # Cluster - name = "${local.name}-secondary" - description = "Example MemoryDB cluster" - - # This makes it part of the multi region cluster - multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name - - # engine = "valkey" - # engine_version = "7.3" - auto_minor_version_upgrade = true - node_type = "db.r7g.xlarge" - num_shards = 2 - num_replicas_per_shard = 2 - - # tls_enabled = true - security_group_ids = [module.secondary_security_group.security_group_id] - maintenance_window = "sun:23:00-mon:01:30" - snapshot_retention_limit = 7 - snapshot_window = "05:00-09:00" - - # ACL - create_acl = false - acl_name = "${local.name}-acl" - acl_tags = { acl = "custom" } - - # Parameter group - create_parameter_group = false - - # Subnet group - subnet_group_name = "${local.name}-subnet-group" - subnet_group_description = "Example MemoryDB subnet group" - subnet_ids = module.secondary_vpc.database_subnets - subnet_group_tags = { - subnet_group = "custom" - } - - tags = local.tags - - providers = { - aws = aws.us-west-2 - } -} +# Provides example of an additional region cluster that is part of the multi-region cluster +# Note: Deleting a cluster with existing clusters in other regions can take several hours +# it places the multi-region cluster into an updating state which is not valid for deletion + +#provider "aws" { +# region = "us-west-2" +# alias = "us-west-2" +#} + +#module "secondary_memory_db" { +# source = "../.." +# +# # Cluster +# name = "${local.name}-secondary" +# description = "Example MemoryDB cluster" +# +# # This makes it part of the multi region cluster +# multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name +# +# auto_minor_version_upgrade = true +# node_type = "db.r7g.xlarge" +# num_shards = 2 +# num_replicas_per_shard = 2 +# +# security_group_ids = [module.secondary_security_group.security_group_id] +# maintenance_window = "sun:23:00-mon:01:30" +# snapshot_retention_limit = 7 +# snapshot_window = "05:00-09:00" +# +# # ACL +# create_acl = true +# acl_name = "${local.name}-acl" +# acl_tags = { acl = "custom" } +# +# # Parameter group +# create_parameter_group = false +# +# # Subnet group +# subnet_group_name = "${local.name}-subnet-group" +# subnet_group_description = "Example MemoryDB subnet group" +# subnet_ids = module.secondary_vpc.database_subnets +# subnet_group_tags = { +# subnet_group = "custom" +# } +# +# tags = local.tags +# +# providers = { +# aws = aws.us-west-2 +# } +#} ################################################################################ # Supporting Resources @@ -170,31 +168,6 @@ module "vpc" { tags = local.tags } -module "secondary_vpc" { - source = "terraform-aws-modules/vpc/aws" - version = "~> 5.0" - - name = local.name - cidr = "10.99.0.0/18" - - azs = ["us-west-2a", "us-west-2b", "us-west-2d"] # Caution: check which zones are available - private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] - database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] - - create_database_subnet_group = true - enable_nat_gateway = false - - manage_default_security_group = true - default_security_group_ingress = [] - default_security_group_egress = [] - - tags = local.tags - - providers = { - aws = aws.us-west-2 - } -} - module "security_group" { source = "terraform-aws-modules/security-group/aws" version = "~> 4.0" @@ -212,29 +185,54 @@ module "security_group" { tags = local.tags } -module "secondary_security_group" { - source = "terraform-aws-modules/security-group/aws" - version = "~> 4.0" - - name = local.name - description = "Security group for ${local.name}" - vpc_id = module.secondary_vpc.vpc_id - - ingress_cidr_blocks = module.secondary_vpc.private_subnets_cidr_blocks - ingress_rules = ["redis-tcp"] - - egress_cidr_blocks = [module.secondary_vpc.vpc_cidr_block] - egress_rules = ["all-all"] - - tags = local.tags - - providers = { - aws = aws.us-west-2 - } -} - resource "random_password" "password" { length = 16 special = true override_special = "_%@" } + +#module "secondary_vpc" { +# source = "terraform-aws-modules/vpc/aws" +# version = "~> 5.0" +# +# name = local.name +# cidr = "10.99.0.0/18" +# +# azs = ["us-west-2a", "us-west-2b", "us-west-2d"] # Caution: check which zones are available +# private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] +# database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] +# +# create_database_subnet_group = true +# enable_nat_gateway = false +# +# manage_default_security_group = true +# default_security_group_ingress = [] +# default_security_group_egress = [] +# +# tags = local.tags +# +# providers = { +# aws = aws.us-west-2 +# } +#} +# +#module "secondary_security_group" { +# source = "terraform-aws-modules/security-group/aws" +# version = "~> 4.0" +# +# name = local.name +# description = "Security group for ${local.name}" +# vpc_id = module.secondary_vpc.vpc_id +# +# ingress_cidr_blocks = module.secondary_vpc.private_subnets_cidr_blocks +# ingress_rules = ["redis-tcp"] +# +# egress_cidr_blocks = [module.secondary_vpc.vpc_cidr_block] +# egress_rules = ["all-all"] +# +# tags = local.tags +# +# providers = { +# aws = aws.us-west-2 +# } +#} diff --git a/examples/multi-region/outputs.tf b/examples/multi-region/outputs.tf index e69de29..cc7f567 100644 --- a/examples/multi-region/outputs.tf +++ b/examples/multi-region/outputs.tf @@ -0,0 +1,109 @@ +################################################################################ +# Multi Region Cluster +################################################################################ + +output "multi_region_cluster_arn" { + description = "The ARN of the multi-region cluster" + value = module.multi_region_cluster.multi_region_cluster_arn +} + +output "multi_region_cluster_name" { + description = "The name of the multi-region cluster" + value = module.multi_region_cluster.multi_region_cluster_name +} + +################################################################################ +# Cluster +################################################################################ + +output "cluster_id" { + description = "Cluster name" + value = module.memory_db.cluster_id +} + +output "cluster_arn" { + description = "The ARN of the cluster" + value = module.memory_db.cluster_arn +} + +output "cluster_endpoint_address" { + description = "DNS hostname of the cluster configuration endpoint" + value = module.memory_db.cluster_endpoint_address +} + +output "cluster_endpoint_port" { + description = "Port number that the cluster configuration endpoint is listening on" + value = module.memory_db.cluster_endpoint_port +} + +output "cluster_engine_patch_version" { + description = "Patch version number of the Redis engine used by the cluster" + value = module.memory_db.cluster_engine_patch_version +} + +output "cluster_shards" { + description = "Set of shards in this cluster" + value = module.memory_db.cluster_shards +} + +################################################################################ +# User(s) +################################################################################ + +output "users" { + description = "Map of attributes for the users created" + value = module.memory_db.users + sensitive = true +} + +################################################################################ +# ACL +################################################################################ + +output "acl_id" { + description = "Name of the ACL" + value = module.memory_db.acl_id +} + +output "acl_arn" { + description = "The ARN of the ACL" + value = module.memory_db.acl_arn +} + +output "acl_minimum_engine_version" { + description = "The minimum engine version supported by the ACL" + value = module.memory_db.acl_minimum_engine_version +} + +################################################################################ +# Parameter Group +################################################################################ + +output "parameter_group_id" { + description = "Name of the parameter group" + value = module.memory_db.parameter_group_id +} + +output "parameter_group_arn" { + description = "The ARN of the parameter group" + value = module.memory_db.parameter_group_arn +} + +################################################################################ +# Subnet Group +################################################################################ + +output "subnet_group_id" { + description = "Name of the subnet group" + value = module.memory_db.subnet_group_id +} + +output "subnet_group_arn" { + description = "ARN of the subnet group" + value = module.memory_db.subnet_group_arn +} + +output "subnet_group_vpc_id" { + description = "The VPC in which the subnet group exists" + value = module.memory_db.subnet_group_vpc_id +} diff --git a/modules/multi-region-cluster/README.md b/modules/multi-region-cluster/README.md index e69de29..e92e8e7 100644 --- a/modules/multi-region-cluster/README.md +++ b/modules/multi-region-cluster/README.md @@ -0,0 +1,49 @@ +# multi-region cluster + + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.0 | +| [aws](#requirement\_aws) | >= 5.82 | + +## Providers + +| Name | Version | +|------|---------| +| [aws](#provider\_aws) | >= 5.82 | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [aws_memorydb_multi_region_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_multi_region_cluster) | resource | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [create](#input\_create) | Determines whether resources will be created - affects all resources | `bool` | `true` | no | +| [description](#input\_description) | Description for the cluster. Defaults to `Managed by Terraform` | `string` | `null` | no | +| [engine](#input\_engine) | The engine that will run on your nodes. Supported values are redis and valkey | `string` | `null` | no | +| [engine\_version](#input\_engine\_version) | Version number of the engine to be used for the cluster. Downgrades are not supported | `string` | `null` | no | +| [multi\_region\_cluster\_name\_suffix](#input\_multi\_region\_cluster\_name\_suffix) | A suffix to be added to the multi-region cluster name. An AWS generated prefix is automatically applied to the multi-region cluster name when it is created | `string` | `null` | no | +| [multi\_region\_parameter\_group\_name](#input\_multi\_region\_parameter\_group\_name) | The name of the multi-region parameter group to be associated with the cluster | `string` | `null` | no | +| [node\_type](#input\_node\_type) | The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html) | `string` | `null` | no | +| [num\_shards](#input\_num\_shards) | The number of shards in the cluster. Defaults to `1` | `number` | `null` | no | +| [tags](#input\_tags) | A map of tags to use on all resources | `map(string)` | `{}` | no | +| [timeouts](#input\_timeouts) | Define maximum timeout for creating, updating, and deleting memorydb resources | `map(string)` | `{}` | no | +| [tls\_enabled](#input\_tls\_enabled) | A flag to enable in-transit encryption on the cluster. When set to `false`, the `acl_name` must be `open-access`. Defaults to `true` | `bool` | `null` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| [multi\_region\_cluster\_arn](#output\_multi\_region\_cluster\_arn) | The ARN of the multi-region cluster | +| [multi\_region\_cluster\_name](#output\_multi\_region\_cluster\_name) | The name of the multi-region cluster | + From 0552d7656c2f45a3efd44cb33aca466eeee25ea1 Mon Sep 17 00:00:00 2001 From: magreenbaum Date: Wed, 1 Jan 2025 09:02:46 -0500 Subject: [PATCH 3/5] fixes --- README.md | 1 + examples/multi-region/README.md | 1 - examples/multi-region/main.tf | 3 +-- modules/multi-region-cluster/README.md | 2 ++ 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5c9133f..6305677 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ module "memory_db" { Examples codified under the [`examples`](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples) are intended to give users references for how to use the module(s) as well as testing/validating changes to the source code of the module. If contributing to the project, please be sure to make any appropriate updates to the relevant examples to allow maintainers to test your changes and to keep the examples up to date for users. Thank you! - [Complete](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/complete) +- [Multi Region](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/multi-region) - [Valkey](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/valkey) diff --git a/examples/multi-region/README.md b/examples/multi-region/README.md index 9e9127b..5cb1abb 100644 --- a/examples/multi-region/README.md +++ b/examples/multi-region/README.md @@ -7,7 +7,6 @@ Configuration in this directory creates: - AWS MemoryDB users - AWS MemoryDB ACL - AWS MemoryDB subnet group -- AWS MemoryDB parameter group ## Requirements diff --git a/examples/multi-region/main.tf b/examples/multi-region/main.tf index 6613087..456b307 100644 --- a/examples/multi-region/main.tf +++ b/examples/multi-region/main.tf @@ -13,7 +13,7 @@ locals { } ################################################################################ -# MemoryDB Module +# Multi Region MemoryDB Module ################################################################################ module "memory_db_disabled" { @@ -35,7 +35,6 @@ module "multi_region_cluster" { num_shards = 2 } - module "memory_db" { source = "../.." diff --git a/modules/multi-region-cluster/README.md b/modules/multi-region-cluster/README.md index e92e8e7..4ba7c80 100644 --- a/modules/multi-region-cluster/README.md +++ b/modules/multi-region-cluster/README.md @@ -1,5 +1,7 @@ # multi-region cluster +Provides a multi-region MemoryDB cluster resource. + ## Requirements From e32c7ee86f674aedde606e48c51c213ea867fa25 Mon Sep 17 00:00:00 2001 From: magreenbaum Date: Wed, 1 Jan 2025 09:06:05 -0500 Subject: [PATCH 4/5] update comment --- examples/multi-region/main.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/multi-region/main.tf b/examples/multi-region/main.tf index 456b307..21e1b23 100644 --- a/examples/multi-region/main.tf +++ b/examples/multi-region/main.tf @@ -91,8 +91,8 @@ module "memory_db" { } # Provides example of an additional region cluster that is part of the multi-region cluster -# Note: Deleting a cluster with existing clusters in other regions can take several hours -# it places the multi-region cluster into an updating state which is not valid for deletion +# Note: Deleting a cluster with existing clusters in other regions can take up to several hours +# It places the multi-region clusters into an updating state which is not valid for deletion #provider "aws" { # region = "us-west-2" From 79f7e24d28432c93b039021870e2427249b20c0e Mon Sep 17 00:00:00 2001 From: magreenbaum Date: Mon, 6 Jan 2025 19:04:49 -0500 Subject: [PATCH 5/5] feedback changes --- README.md | 1 - examples/multi-region/README.md | 67 ------ examples/multi-region/main.tf | 237 ---------------------- examples/multi-region/outputs.tf | 109 ---------- examples/multi-region/variables.tf | 0 examples/multi-region/versions.tf | 14 -- modules/multi-region-cluster/README.md | 51 ----- modules/multi-region-cluster/main.tf | 21 -- modules/multi-region-cluster/outputs.tf | 9 - modules/multi-region-cluster/variables.tf | 65 ------ modules/multi-region-cluster/versions.tf | 10 - 11 files changed, 584 deletions(-) delete mode 100644 examples/multi-region/README.md delete mode 100644 examples/multi-region/main.tf delete mode 100644 examples/multi-region/outputs.tf delete mode 100644 examples/multi-region/variables.tf delete mode 100644 examples/multi-region/versions.tf delete mode 100644 modules/multi-region-cluster/README.md delete mode 100644 modules/multi-region-cluster/main.tf delete mode 100644 modules/multi-region-cluster/outputs.tf delete mode 100644 modules/multi-region-cluster/variables.tf delete mode 100644 modules/multi-region-cluster/versions.tf diff --git a/README.md b/README.md index 6305677..5c9133f 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,6 @@ module "memory_db" { Examples codified under the [`examples`](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples) are intended to give users references for how to use the module(s) as well as testing/validating changes to the source code of the module. If contributing to the project, please be sure to make any appropriate updates to the relevant examples to allow maintainers to test your changes and to keep the examples up to date for users. Thank you! - [Complete](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/complete) -- [Multi Region](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/multi-region) - [Valkey](https://github.com/terraform-aws-modules/terraform-aws-memory-db/tree/master/examples/valkey) diff --git a/examples/multi-region/README.md b/examples/multi-region/README.md deleted file mode 100644 index 5cb1abb..0000000 --- a/examples/multi-region/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# Multi Region cluster - -Configuration in this directory creates: - -- AWS Multi-Regional MemoryDB cluster -- AWS MemoryDB cluster -- AWS MemoryDB users -- AWS MemoryDB ACL -- AWS MemoryDB subnet group - - -## Requirements - -| Name | Version | -|------|---------| -| [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 5.82 | -| [random](#requirement\_random) | >= 3.0 | - -## Providers - -| Name | Version | -|------|---------| -| [random](#provider\_random) | >= 3.0 | - -## Modules - -| Name | Source | Version | -|------|--------|---------| -| [memory\_db](#module\_memory\_db) | ../.. | n/a | -| [memory\_db\_disabled](#module\_memory\_db\_disabled) | ../.. | n/a | -| [multi\_region\_cluster](#module\_multi\_region\_cluster) | ../../modules/multi-region-cluster | n/a | -| [security\_group](#module\_security\_group) | terraform-aws-modules/security-group/aws | ~> 4.0 | -| [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 5.0 | - -## Resources - -| Name | Type | -|------|------| -| [random_password.password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource | - -## Inputs - -No inputs. - -## Outputs - -| Name | Description | -|------|-------------| -| [acl\_arn](#output\_acl\_arn) | The ARN of the ACL | -| [acl\_id](#output\_acl\_id) | Name of the ACL | -| [acl\_minimum\_engine\_version](#output\_acl\_minimum\_engine\_version) | The minimum engine version supported by the ACL | -| [cluster\_arn](#output\_cluster\_arn) | The ARN of the cluster | -| [cluster\_endpoint\_address](#output\_cluster\_endpoint\_address) | DNS hostname of the cluster configuration endpoint | -| [cluster\_endpoint\_port](#output\_cluster\_endpoint\_port) | Port number that the cluster configuration endpoint is listening on | -| [cluster\_engine\_patch\_version](#output\_cluster\_engine\_patch\_version) | Patch version number of the Redis engine used by the cluster | -| [cluster\_id](#output\_cluster\_id) | Cluster name | -| [cluster\_shards](#output\_cluster\_shards) | Set of shards in this cluster | -| [multi\_region\_cluster\_arn](#output\_multi\_region\_cluster\_arn) | The ARN of the multi-region cluster | -| [multi\_region\_cluster\_name](#output\_multi\_region\_cluster\_name) | The name of the multi-region cluster | -| [parameter\_group\_arn](#output\_parameter\_group\_arn) | The ARN of the parameter group | -| [parameter\_group\_id](#output\_parameter\_group\_id) | Name of the parameter group | -| [subnet\_group\_arn](#output\_subnet\_group\_arn) | ARN of the subnet group | -| [subnet\_group\_id](#output\_subnet\_group\_id) | Name of the subnet group | -| [subnet\_group\_vpc\_id](#output\_subnet\_group\_vpc\_id) | The VPC in which the subnet group exists | -| [users](#output\_users) | Map of attributes for the users created | - diff --git a/examples/multi-region/main.tf b/examples/multi-region/main.tf deleted file mode 100644 index 21e1b23..0000000 --- a/examples/multi-region/main.tf +++ /dev/null @@ -1,237 +0,0 @@ -provider "aws" { - region = local.region -} - -locals { - region = "us-east-1" - name = "memorydb-ex-${replace(basename(path.cwd), "_", "-")}" - - tags = { - Example = local.name - Environment = "dev" - } -} - -################################################################################ -# Multi Region MemoryDB Module -################################################################################ - -module "memory_db_disabled" { - source = "../.." - - name = "${local.name}-disabled" - create = false -} - -module "multi_region_cluster" { - source = "../../modules/multi-region-cluster" - - create = true - multi_region_cluster_name_suffix = local.name - tls_enabled = true - engine = "valkey" - engine_version = "7.3" - node_type = "db.r7g.xlarge" - num_shards = 2 -} - -module "memory_db" { - source = "../.." - - # Cluster - name = local.name - description = "Example MemoryDB cluster" - - # This makes it part of the multi region cluster - multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name - - auto_minor_version_upgrade = true - node_type = "db.r7g.xlarge" - num_shards = 2 - num_replicas_per_shard = 2 - - security_group_ids = [module.security_group.security_group_id] - maintenance_window = "sun:23:00-mon:01:30" - snapshot_retention_limit = 7 - snapshot_window = "05:00-09:00" - - # Users - users = { - admin = { - user_name = "admin-user" - access_string = "on ~* &* +@all" - type = "iam" - tags = { user = "admin" } - } - readonly = { - user_name = "readonly-user" - access_string = "on ~* &* -@all +@read" - passwords = [random_password.password.result] - tags = { user = "readonly" } - } - } - - # ACL - create_acl = true - acl_name = "${local.name}-acl" - acl_tags = { acl = "custom" } - - # Parameter group - create_parameter_group = false - - # Subnet group - subnet_group_name = "${local.name}-subnet-group" - subnet_group_description = "Example MemoryDB subnet group" - subnet_ids = module.vpc.database_subnets - subnet_group_tags = { - subnet_group = "custom" - } - - tags = local.tags -} - -# Provides example of an additional region cluster that is part of the multi-region cluster -# Note: Deleting a cluster with existing clusters in other regions can take up to several hours -# It places the multi-region clusters into an updating state which is not valid for deletion - -#provider "aws" { -# region = "us-west-2" -# alias = "us-west-2" -#} - -#module "secondary_memory_db" { -# source = "../.." -# -# # Cluster -# name = "${local.name}-secondary" -# description = "Example MemoryDB cluster" -# -# # This makes it part of the multi region cluster -# multi_region_cluster_name = module.multi_region_cluster.multi_region_cluster_name -# -# auto_minor_version_upgrade = true -# node_type = "db.r7g.xlarge" -# num_shards = 2 -# num_replicas_per_shard = 2 -# -# security_group_ids = [module.secondary_security_group.security_group_id] -# maintenance_window = "sun:23:00-mon:01:30" -# snapshot_retention_limit = 7 -# snapshot_window = "05:00-09:00" -# -# # ACL -# create_acl = true -# acl_name = "${local.name}-acl" -# acl_tags = { acl = "custom" } -# -# # Parameter group -# create_parameter_group = false -# -# # Subnet group -# subnet_group_name = "${local.name}-subnet-group" -# subnet_group_description = "Example MemoryDB subnet group" -# subnet_ids = module.secondary_vpc.database_subnets -# subnet_group_tags = { -# subnet_group = "custom" -# } -# -# tags = local.tags -# -# providers = { -# aws = aws.us-west-2 -# } -#} - -################################################################################ -# Supporting Resources -################################################################################ - -module "vpc" { - source = "terraform-aws-modules/vpc/aws" - version = "~> 5.0" - - name = local.name - cidr = "10.99.0.0/18" - - azs = ["${local.region}a", "${local.region}b", "${local.region}d"] # Caution: check which zones are available - private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] - database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] - - create_database_subnet_group = true - enable_nat_gateway = false - - manage_default_security_group = true - default_security_group_ingress = [] - default_security_group_egress = [] - - tags = local.tags -} - -module "security_group" { - source = "terraform-aws-modules/security-group/aws" - version = "~> 4.0" - - name = local.name - description = "Security group for ${local.name}" - vpc_id = module.vpc.vpc_id - - ingress_cidr_blocks = module.vpc.private_subnets_cidr_blocks - ingress_rules = ["redis-tcp"] - - egress_cidr_blocks = [module.vpc.vpc_cidr_block] - egress_rules = ["all-all"] - - tags = local.tags -} - -resource "random_password" "password" { - length = 16 - special = true - override_special = "_%@" -} - -#module "secondary_vpc" { -# source = "terraform-aws-modules/vpc/aws" -# version = "~> 5.0" -# -# name = local.name -# cidr = "10.99.0.0/18" -# -# azs = ["us-west-2a", "us-west-2b", "us-west-2d"] # Caution: check which zones are available -# private_subnets = ["10.99.0.0/24", "10.99.1.0/24", "10.99.2.0/24"] -# database_subnets = ["10.99.3.0/24", "10.99.4.0/24", "10.99.5.0/24"] -# -# create_database_subnet_group = true -# enable_nat_gateway = false -# -# manage_default_security_group = true -# default_security_group_ingress = [] -# default_security_group_egress = [] -# -# tags = local.tags -# -# providers = { -# aws = aws.us-west-2 -# } -#} -# -#module "secondary_security_group" { -# source = "terraform-aws-modules/security-group/aws" -# version = "~> 4.0" -# -# name = local.name -# description = "Security group for ${local.name}" -# vpc_id = module.secondary_vpc.vpc_id -# -# ingress_cidr_blocks = module.secondary_vpc.private_subnets_cidr_blocks -# ingress_rules = ["redis-tcp"] -# -# egress_cidr_blocks = [module.secondary_vpc.vpc_cidr_block] -# egress_rules = ["all-all"] -# -# tags = local.tags -# -# providers = { -# aws = aws.us-west-2 -# } -#} diff --git a/examples/multi-region/outputs.tf b/examples/multi-region/outputs.tf deleted file mode 100644 index cc7f567..0000000 --- a/examples/multi-region/outputs.tf +++ /dev/null @@ -1,109 +0,0 @@ -################################################################################ -# Multi Region Cluster -################################################################################ - -output "multi_region_cluster_arn" { - description = "The ARN of the multi-region cluster" - value = module.multi_region_cluster.multi_region_cluster_arn -} - -output "multi_region_cluster_name" { - description = "The name of the multi-region cluster" - value = module.multi_region_cluster.multi_region_cluster_name -} - -################################################################################ -# Cluster -################################################################################ - -output "cluster_id" { - description = "Cluster name" - value = module.memory_db.cluster_id -} - -output "cluster_arn" { - description = "The ARN of the cluster" - value = module.memory_db.cluster_arn -} - -output "cluster_endpoint_address" { - description = "DNS hostname of the cluster configuration endpoint" - value = module.memory_db.cluster_endpoint_address -} - -output "cluster_endpoint_port" { - description = "Port number that the cluster configuration endpoint is listening on" - value = module.memory_db.cluster_endpoint_port -} - -output "cluster_engine_patch_version" { - description = "Patch version number of the Redis engine used by the cluster" - value = module.memory_db.cluster_engine_patch_version -} - -output "cluster_shards" { - description = "Set of shards in this cluster" - value = module.memory_db.cluster_shards -} - -################################################################################ -# User(s) -################################################################################ - -output "users" { - description = "Map of attributes for the users created" - value = module.memory_db.users - sensitive = true -} - -################################################################################ -# ACL -################################################################################ - -output "acl_id" { - description = "Name of the ACL" - value = module.memory_db.acl_id -} - -output "acl_arn" { - description = "The ARN of the ACL" - value = module.memory_db.acl_arn -} - -output "acl_minimum_engine_version" { - description = "The minimum engine version supported by the ACL" - value = module.memory_db.acl_minimum_engine_version -} - -################################################################################ -# Parameter Group -################################################################################ - -output "parameter_group_id" { - description = "Name of the parameter group" - value = module.memory_db.parameter_group_id -} - -output "parameter_group_arn" { - description = "The ARN of the parameter group" - value = module.memory_db.parameter_group_arn -} - -################################################################################ -# Subnet Group -################################################################################ - -output "subnet_group_id" { - description = "Name of the subnet group" - value = module.memory_db.subnet_group_id -} - -output "subnet_group_arn" { - description = "ARN of the subnet group" - value = module.memory_db.subnet_group_arn -} - -output "subnet_group_vpc_id" { - description = "The VPC in which the subnet group exists" - value = module.memory_db.subnet_group_vpc_id -} diff --git a/examples/multi-region/variables.tf b/examples/multi-region/variables.tf deleted file mode 100644 index e69de29..0000000 diff --git a/examples/multi-region/versions.tf b/examples/multi-region/versions.tf deleted file mode 100644 index f321667..0000000 --- a/examples/multi-region/versions.tf +++ /dev/null @@ -1,14 +0,0 @@ -terraform { - required_version = ">= 1.0" - - required_providers { - aws = { - source = "hashicorp/aws" - version = ">= 5.82" - } - random = { - source = "hashicorp/random" - version = ">= 3.0" - } - } -} diff --git a/modules/multi-region-cluster/README.md b/modules/multi-region-cluster/README.md deleted file mode 100644 index 4ba7c80..0000000 --- a/modules/multi-region-cluster/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# multi-region cluster - -Provides a multi-region MemoryDB cluster resource. - - -## Requirements - -| Name | Version | -|------|---------| -| [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 5.82 | - -## Providers - -| Name | Version | -|------|---------| -| [aws](#provider\_aws) | >= 5.82 | - -## Modules - -No modules. - -## Resources - -| Name | Type | -|------|------| -| [aws_memorydb_multi_region_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/memorydb_multi_region_cluster) | resource | - -## Inputs - -| Name | Description | Type | Default | Required | -|------|-------------|------|---------|:--------:| -| [create](#input\_create) | Determines whether resources will be created - affects all resources | `bool` | `true` | no | -| [description](#input\_description) | Description for the cluster. Defaults to `Managed by Terraform` | `string` | `null` | no | -| [engine](#input\_engine) | The engine that will run on your nodes. Supported values are redis and valkey | `string` | `null` | no | -| [engine\_version](#input\_engine\_version) | Version number of the engine to be used for the cluster. Downgrades are not supported | `string` | `null` | no | -| [multi\_region\_cluster\_name\_suffix](#input\_multi\_region\_cluster\_name\_suffix) | A suffix to be added to the multi-region cluster name. An AWS generated prefix is automatically applied to the multi-region cluster name when it is created | `string` | `null` | no | -| [multi\_region\_parameter\_group\_name](#input\_multi\_region\_parameter\_group\_name) | The name of the multi-region parameter group to be associated with the cluster | `string` | `null` | no | -| [node\_type](#input\_node\_type) | The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html) | `string` | `null` | no | -| [num\_shards](#input\_num\_shards) | The number of shards in the cluster. Defaults to `1` | `number` | `null` | no | -| [tags](#input\_tags) | A map of tags to use on all resources | `map(string)` | `{}` | no | -| [timeouts](#input\_timeouts) | Define maximum timeout for creating, updating, and deleting memorydb resources | `map(string)` | `{}` | no | -| [tls\_enabled](#input\_tls\_enabled) | A flag to enable in-transit encryption on the cluster. When set to `false`, the `acl_name` must be `open-access`. Defaults to `true` | `bool` | `null` | no | - -## Outputs - -| Name | Description | -|------|-------------| -| [multi\_region\_cluster\_arn](#output\_multi\_region\_cluster\_arn) | The ARN of the multi-region cluster | -| [multi\_region\_cluster\_name](#output\_multi\_region\_cluster\_name) | The name of the multi-region cluster | - diff --git a/modules/multi-region-cluster/main.tf b/modules/multi-region-cluster/main.tf deleted file mode 100644 index 3688271..0000000 --- a/modules/multi-region-cluster/main.tf +++ /dev/null @@ -1,21 +0,0 @@ -resource "aws_memorydb_multi_region_cluster" "this" { - count = var.create ? 1 : 0 - - multi_region_cluster_name_suffix = var.multi_region_cluster_name_suffix - node_type = var.node_type - - description = var.description - engine = var.engine - engine_version = var.engine_version - multi_region_parameter_group_name = var.multi_region_parameter_group_name - num_shards = var.num_shards - tls_enabled = var.tls_enabled - - tags = var.tags - - timeouts { - create = try(var.timeouts.create, "120m") - update = try(var.timeouts.update, "120m") - delete = try(var.timeouts.delete, "120m") - } -} diff --git a/modules/multi-region-cluster/outputs.tf b/modules/multi-region-cluster/outputs.tf deleted file mode 100644 index 6d45504..0000000 --- a/modules/multi-region-cluster/outputs.tf +++ /dev/null @@ -1,9 +0,0 @@ -output "multi_region_cluster_arn" { - description = "The ARN of the multi-region cluster" - value = try(aws_memorydb_multi_region_cluster.this[0].arn, null) -} - -output "multi_region_cluster_name" { - description = "The name of the multi-region cluster" - value = try(aws_memorydb_multi_region_cluster.this[0].multi_region_cluster_name, null) -} diff --git a/modules/multi-region-cluster/variables.tf b/modules/multi-region-cluster/variables.tf deleted file mode 100644 index 9a20d5c..0000000 --- a/modules/multi-region-cluster/variables.tf +++ /dev/null @@ -1,65 +0,0 @@ -variable "create" { - description = "Determines whether resources will be created - affects all resources" - type = bool - default = true -} - -variable "tags" { - description = "A map of tags to use on all resources" - type = map(string) - default = {} -} - -variable "multi_region_cluster_name_suffix" { - description = "A suffix to be added to the multi-region cluster name. An AWS generated prefix is automatically applied to the multi-region cluster name when it is created" - type = string - default = null -} - -variable "multi_region_parameter_group_name" { - description = "The name of the multi-region parameter group to be associated with the cluster" - type = string - default = null -} - -variable "description" { - description = "Description for the cluster. Defaults to `Managed by Terraform`" - type = string - default = null -} - -variable "engine" { - description = "The engine that will run on your nodes. Supported values are redis and valkey" - type = string - default = null -} - -variable "engine_version" { - description = "Version number of the engine to be used for the cluster. Downgrades are not supported" - type = string - default = null -} - -variable "node_type" { - description = "The compute and memory capacity of the nodes in the cluster. See AWS documentation on [supported node types](https://docs.aws.amazon.com/memorydb/latest/devguide/nodes.supportedtypes.html) as well as [vertical scaling](https://docs.aws.amazon.com/memorydb/latest/devguide/cluster-vertical-scaling.html)" - type = string - default = null -} - -variable "num_shards" { - description = "The number of shards in the cluster. Defaults to `1`" - type = number - default = null -} - -variable "tls_enabled" { - description = "A flag to enable in-transit encryption on the cluster. When set to `false`, the `acl_name` must be `open-access`. Defaults to `true`" - type = bool - default = null -} - -variable "timeouts" { - description = "Define maximum timeout for creating, updating, and deleting memorydb resources" - type = map(string) - default = {} -} diff --git a/modules/multi-region-cluster/versions.tf b/modules/multi-region-cluster/versions.tf deleted file mode 100644 index bdfd597..0000000 --- a/modules/multi-region-cluster/versions.tf +++ /dev/null @@ -1,10 +0,0 @@ -terraform { - required_version = ">= 1.0" - - required_providers { - aws = { - source = "hashicorp/aws" - version = ">= 5.82" - } - } -}