diff --git a/README.md b/README.md index da3d158..b74feca 100644 --- a/README.md +++ b/README.md @@ -53,35 +53,39 @@ No requirements. ## Inputs -| Name | Description | Type | Default | Required | -|------|-------------|------|---------|:--------:| -| allowed\_cidr | A list CIDRs to allow access to. | `list(string)` | <pre>[<br> "127.0.0.1/32"<br>]</pre> | no | -| allowed\_security\_groups | A list of Security Group ID's to allow access to. | `list(string)` | `[]` | no | -| apply\_immediately | Specifies whether any modifications are applied immediately, or during the next maintenance window. Default is false. | `bool` | `false` | no | -| at\_rest\_encryption\_enabled | Whether to enable encryption at rest | `bool` | `false` | no | -| auth\_token | The password used to access a password protected server. Can be specified only if transit\_encryption\_enabled = true. If specified must contain from 16 to 128 alphanumeric characters or symbols | `string` | `null` | no | -| auto\_minor\_version\_upgrade | Specifies whether a minor engine upgrades will be applied automatically to the underlying Cache Cluster instances during the maintenance window | `bool` | `true` | no | -| availability\_zones | A list of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is not important | `list(string)` | `[]` | no | -| env | env to deploy into, should typically dev/staging/prod | `string` | n/a | yes | -| kms\_key\_id | The ARN of the key that you wish to use if encrypting at rest. If not supplied, uses service managed encryption. Can be specified only if at\_rest\_encryption\_enabled = true | `string` | `""` | no | -| name | Name for the Redis replication group i.e. UserObject | `string` | n/a | yes | -| notification\_topic\_arn | An Amazon Resource Name (ARN) of an SNS topic to send ElastiCache notifications to. Example: arn:aws:sns:us-east-1:012345678999:my\_sns\_topic | `string` | `""` | no | -| redis\_clusters | Number of Redis cache clusters (nodes) to create | `string` | n/a | yes | -| redis\_failover | n/a | `bool` | `false` | no | -| redis\_maintenance\_window | Specifies the weekly time range for when maintenance on the cache cluster is performed. The format is ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period | `string` | `"fri:08:00-fri:09:00"` | no | -| redis\_node\_type | Instance type to use for creating the Redis cache clusters | `string` | `"cache.m3.medium"` | no | -| redis\_parameters | additional parameters modifyed in parameter group | `list(map(any))` | `[]` | no | -| redis\_port | n/a | `number` | `6379` | no | +| Name | Description | Type | Default | Required | +|-----------------------------------|-------------|------|----|:--------:| +| allowed\_cidr | A list CIDRs to allow access to. | `list(string)` | <pre>[<br> "127.0.0.1/32"<br>]</pre> | no | +| allowed\_security\_groups | A list of Security Group ID's to allow access to. | `list(string)` | `[]` | no | +| apply\_immediately | Specifies whether any modifications are applied immediately, or during the next maintenance window. Default is false. | `bool` | `false` | no | +| at\_rest\_encryption\_enabled | Whether to enable encryption at rest | `bool` | `false` | no | +| auth\_token | The password used to access a password protected server. Can be specified only if transit\_encryption\_enabled = true. If specified must contain from 16 to 128 alphanumeric characters or symbols | `string` | `null` | no | +| auto\_minor\_version\_upgrade | Specifies whether a minor engine upgrades will be applied automatically to the underlying Cache Cluster instances during the maintenance window | `bool` | `true` | no | +| availability\_zones | A list of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is not important | `list(string)` | `[]` | no | +| elasticache_parameter_group_name | Name of the ElastiCache parameter group | `string` | `""` | no | +| elasticache_replication_group_id | Name of the ElastiCache replication group | `string` | `""` | no | +| elasticache_security_group_name | Name of the ElastiCache security group | `string` | `""` | no | +| elasticache_subnet_group_name | Name of the ElastiCache subnet group | `string` | `""` | no | +| env | env to deploy into, should typically dev/staging/prod | `string` | n/a | yes | +| kms\_key\_id | The ARN of the key that you wish to use if encrypting at rest. If not supplied, uses service managed encryption. Can be specified only if at\_rest\_encryption\_enabled = true | `string` | `""` | no | +| name | Name for the Redis replication group i.e. UserObject | `string` | n/a | yes | +| notification\_topic\_arn | An Amazon Resource Name (ARN) of an SNS topic to send ElastiCache notifications to. Example: arn:aws:sns:us-east-1:012345678999:my\_sns\_topic | `string` | `""` | no | +| redis\_clusters | Number of Redis cache clusters (nodes) to create | `string` | n/a | yes | +| redis\_failover | n/a | `bool` | `false` | no | +| redis\_maintenance\_window | Specifies the weekly time range for when maintenance on the cache cluster is performed. The format is ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period | `string` | `"fri:08:00-fri:09:00"` | no | +| redis\_node\_type | Instance type to use for creating the Redis cache clusters | `string` | `"cache.m3.medium"` | no | +| redis\_parameters | additional parameters modifyed in parameter group | `list(map(any))` | `[]` | no | +| redis\_port | n/a | `number` | `6379` | no | | redis\_snapshot\_retention\_limit | The number of days for which ElastiCache will retain automatic cache cluster snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, then a snapshot that was taken today will be retained for 5 days before being deleted. If the value of SnapshotRetentionLimit is set to zero (0), backups are turned off. Please note that setting a snapshot\_retention\_limit is not supported on cache.t1.micro or cache.t2.\* cache nodes | `number` | `0` | no | -| redis\_snapshot\_window | The daily time range (in UTC) during which ElastiCache will begin taking a daily snapshot of your cache cluster. The minimum snapshot window is a 60 minute period | `string` | `"06:30-07:30"` | no | -| redis\_version | Redis version to use, defaults to 3.2.10 | `string` | `"3.2.10"` | no | -| security\_group\_names | A list of cache security group names to associate with this replication group | `list(string)` | `[]` | no | -| snapshot\_arns | A single-element string list containing an Amazon Resource Name (ARN) of a Redis RDB snapshot file stored in Amazon S3. Example: arn:aws:s3:::my\_bucket/snapshot1.rdb | `list(string)` | `[]` | no | -| snapshot\_name | The name of a snapshot from which to restore data into the new node group. Changing the snapshot\_name forces a new resource | `string` | `""` | no | -| subnets | List of VPC Subnet IDs for the cache subnet group | `list(string)` | n/a | yes | -| tags | Tags for redis nodes | `map(string)` | `{}` | no | -| transit\_encryption\_enabled | Whether to enable encryption in transit. Requires 3.2.6 or >=4.0 redis\_version | `bool` | `false` | no | -| vpc\_id | VPC ID | `string` | n/a | yes | +| redis\_snapshot\_window | The daily time range (in UTC) during which ElastiCache will begin taking a daily snapshot of your cache cluster. The minimum snapshot window is a 60 minute period | `string` | `"06:30-07:30"` | no | +| redis\_version | Redis version to use, defaults to 3.2.10 | `string` | `"3.2.10"` | no | +| security\_group\_names | A list of cache security group names to associate with this replication group | `list(string)` | `[]` | no | +| snapshot\_arns | A single-element string list containing an Amazon Resource Name (ARN) of a Redis RDB snapshot file stored in Amazon S3. Example: arn:aws:s3:::my\_bucket/snapshot1.rdb | `list(string)` | `[]` | no | +| snapshot\_name | The name of a snapshot from which to restore data into the new node group. Changing the snapshot\_name forces a new resource | `string` | `""` | no | +| subnets | List of VPC Subnet IDs for the cache subnet group | `list(string)` | n/a | yes | +| tags | Tags for redis nodes | `map(string)` | `{}` | no | +| transit\_encryption\_enabled | Whether to enable encryption in transit. Requires 3.2.6 or >=4.0 redis\_version | `bool` | `false` | no | +| vpc\_id | VPC ID | `string` | n/a | yes | ## Outputs diff --git a/main.tf b/main.tf index 449f8b4..58a2f40 100644 --- a/main.tf +++ b/main.tf @@ -14,7 +14,7 @@ resource "random_id" "salt" { } resource "aws_elasticache_replication_group" "redis" { - replication_group_id = format("%.20s", "${var.name}-${var.env}") + replication_group_id = var.elasticache_replication_group_id == "" ? format("%.20s", "${var.name}-${var.env}") : var.elasticache_replication_group_id replication_group_description = "Terraform-managed ElastiCache replication group for ${var.name}-${var.env}-${local.vpc_name}" number_cache_clusters = var.redis_clusters node_type = var.redis_node_type @@ -44,7 +44,7 @@ resource "aws_elasticache_replication_group" "redis" { } resource "aws_elasticache_parameter_group" "redis_parameter_group" { - name = replace(format("%.255s", lower(replace("tf-redis-${var.name}-${var.env}-${local.vpc_name}-${random_id.salt.hex}", "_", "-"))), "/\\s/", "-") + name = var.elasticache_parameter_group_name == "" ? replace(format("%.255s", lower(replace("tf-redis-${var.name}-${var.env}-${local.vpc_name}-${random_id.salt.hex}", "_", "-"))), "/\\s/", "-") : var.elasticache_parameter_group_name description = "Terraform-managed ElastiCache parameter group for ${var.name}-${var.env}-${local.vpc_name}" @@ -64,6 +64,6 @@ resource "aws_elasticache_parameter_group" "redis_parameter_group" { } resource "aws_elasticache_subnet_group" "redis_subnet_group" { - name = replace(format("%.255s", lower(replace("tf-redis-${var.name}-${var.env}-${local.vpc_name}", "_", "-"))), "/\\s/", "-") + name = var.elasticache_subnet_group_name == "" ? replace(format("%.255s", lower(replace("tf-redis-${var.name}-${var.env}-${local.vpc_name}", "_", "-"))), "/\\s/", "-") : var.elasticache_subnet_group_name subnet_ids = var.subnets } diff --git a/security_groups.tf b/security_groups.tf index 1b225b4..ad3eb17 100644 --- a/security_groups.tf +++ b/security_groups.tf @@ -1,5 +1,6 @@ + resource "aws_security_group" "redis_security_group" { - name = format("%.255s", "tf-sg-ec-${var.name}-${var.env}-${local.vpc_name}") + name = var.elasticache_security_group_name == "" ? format("%.255s", "tf-sg-ec-${var.name}-${var.env}-${local.vpc_name}") : var.elasticache_security_group_name description = "Terraform-managed ElastiCache security group for ${var.name}-${var.env}-${local.vpc_name}" vpc_id = data.aws_vpc.vpc.id diff --git a/variables.tf b/variables.tf index 182360e..1648374 100644 --- a/variables.tf +++ b/variables.tf @@ -174,3 +174,27 @@ variable "notification_topic_arn" { type = string default = "" } + +variable "elasticache_replication_group_id" { + description = "Name of the ElastiCache replication group" + type = string + default = "" +} + +variable "elasticache_parameter_group_name" { + description = "Name of the ElastiCache parameter group" + type = string + default = "" +} + +variable "elasticache_subnet_group_name" { + description = "Name of the ElastiCache subnet group" + type = string + default = "" +} + +variable "elasticache_security_group_name" { + description = "Name of the ElastiCache security group" + type = string + default = "" +}