@@ -54,6 +54,15 @@ resource "aws_security_group_rule" "ingress_cidr_blocks" {
54
54
55
55
locals {
56
56
elasticache_subnet_group_name = var. elasticache_subnet_group_name != " " ? var. elasticache_subnet_group_name : join (" " , aws_elasticache_subnet_group. default . * . name )
57
+ # if !cluster, then node_count = replica cluster_size, if cluster then node_count = shard*(replica + 1)
58
+ # Why doing this 'The "count" value depends on resource attributes that cannot be determined until apply'. So pre-calculating
59
+ member_clusters_count = (var. cluster_mode_enabled
60
+ ?
61
+ (var. cluster_mode_num_node_groups * (var. cluster_mode_replicas_per_node_group + 1 ))
62
+ :
63
+ var. cluster_size
64
+ )
65
+ elasticache_member_clusters = var. enabled ? tolist (aws_elasticache_replication_group. default . 0 . member_clusters ) : []
57
66
}
58
67
59
68
resource "aws_elasticache_subnet_group" "default" {
@@ -118,8 +127,8 @@ resource "aws_elasticache_replication_group" "default" {
118
127
# CloudWatch Resources
119
128
#
120
129
resource "aws_cloudwatch_metric_alarm" "cache_cpu" {
121
- count = var. enabled ? 1 : 0
122
- alarm_name = " ${ module . label . id } -cpu-utilization"
130
+ count = var. enabled ? local . member_clusters_count : 0
131
+ alarm_name = " ${ element (local . elasticache_member_clusters , count . index ) } -cpu-utilization"
123
132
alarm_description = " Redis cluster CPU utilization"
124
133
comparison_operator = " GreaterThanThreshold"
125
134
evaluation_periods = " 1"
@@ -131,7 +140,7 @@ resource "aws_cloudwatch_metric_alarm" "cache_cpu" {
131
140
threshold = var. alarm_cpu_threshold_percent
132
141
133
142
dimensions = {
134
- CacheClusterId = module.label.id
143
+ CacheClusterId = element (local . elasticache_member_clusters , count . index )
135
144
}
136
145
137
146
alarm_actions = var. alarm_actions
@@ -140,8 +149,8 @@ resource "aws_cloudwatch_metric_alarm" "cache_cpu" {
140
149
}
141
150
142
151
resource "aws_cloudwatch_metric_alarm" "cache_memory" {
143
- count = var. enabled ? 1 : 0
144
- alarm_name = " ${ module . label . id } -freeable-memory"
152
+ count = var. enabled ? local . member_clusters_count : 0
153
+ alarm_name = " ${ element (local . elasticache_member_clusters , count . index ) } -freeable-memory"
145
154
alarm_description = " Redis cluster freeable memory"
146
155
comparison_operator = " LessThanThreshold"
147
156
evaluation_periods = " 1"
@@ -153,7 +162,7 @@ resource "aws_cloudwatch_metric_alarm" "cache_memory" {
153
162
threshold = var. alarm_memory_threshold_bytes
154
163
155
164
dimensions = {
156
- CacheClusterId = module.label.id
165
+ CacheClusterId = element (local . elasticache_member_clusters , count . index )
157
166
}
158
167
159
168
alarm_actions = var. alarm_actions
0 commit comments