main.tf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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]
}