# Subnet group =============================================================== resource "aws_elasticache_subnet_group" "this" { for_each = local.create_subnet_group ? { sg = true } : {} name = local.effective_subnet_group subnet_ids = var.subnet_ids tags = local.tags } # Parameter group ============================================================ resource "aws_elasticache_parameter_group" "this" { name = "${var.cluster_id}-params" family = local.parameter_group_family dynamic "parameter" { for_each = var.parameters content { name = parameter.key value = parameter.value } } lifecycle { create_before_destroy = true } tags = local.tags } # Redis replication group ==================================================== resource "aws_elasticache_replication_group" "this" { for_each = var.engine == "redis" ? { redis = true } : {} replication_group_id = var.cluster_id description = "Managed by Terraform" node_type = var.node_type engine_version = var.engine_version parameter_group_name = aws_elasticache_parameter_group.this.name subnet_group_name = local.effective_subnet_group security_group_ids = var.security_group_ids num_cache_clusters = var.num_cache_clusters automatic_failover_enabled = var.automatic_failover_enabled multi_az_enabled = var.multi_az_enabled at_rest_encryption_enabled = var.at_rest_encryption_enabled transit_encryption_enabled = var.transit_encryption_enabled kms_key_id = var.kms_key_id auth_token = var.auth_token snapshot_retention_limit = var.snapshot_retention_limit snapshot_window = var.snapshot_window maintenance_window = var.maintenance_window tags = local.tags depends_on = [aws_elasticache_subnet_group.this] } # Memcached cluster ========================================================== resource "aws_elasticache_cluster" "memcached" { for_each = var.engine == "memcached" ? { memcached = true } : {} cluster_id = var.cluster_id engine = "memcached" engine_version = var.engine_version node_type = var.node_type num_cache_nodes = var.num_cache_nodes parameter_group_name = aws_elasticache_parameter_group.this.name subnet_group_name = local.effective_subnet_group security_group_ids = var.security_group_ids maintenance_window = var.maintenance_window tags = local.tags depends_on = [aws_elasticache_subnet_group.this] }