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]
}
|