Skip to content

Commit ec14fec

Browse files
authored
Fix cloudwatch alarm failure to create (cloudposse#56) (cloudposse#77)
1 parent f727ef5 commit ec14fec

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

main.tf

+15-6
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ resource "aws_security_group_rule" "ingress_cidr_blocks" {
5454

5555
locals {
5656
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) : []
5766
}
5867

5968
resource "aws_elasticache_subnet_group" "default" {
@@ -118,8 +127,8 @@ resource "aws_elasticache_replication_group" "default" {
118127
# CloudWatch Resources
119128
#
120129
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"
123132
alarm_description = "Redis cluster CPU utilization"
124133
comparison_operator = "GreaterThanThreshold"
125134
evaluation_periods = "1"
@@ -131,7 +140,7 @@ resource "aws_cloudwatch_metric_alarm" "cache_cpu" {
131140
threshold = var.alarm_cpu_threshold_percent
132141

133142
dimensions = {
134-
CacheClusterId = module.label.id
143+
CacheClusterId = element(local.elasticache_member_clusters, count.index)
135144
}
136145

137146
alarm_actions = var.alarm_actions
@@ -140,8 +149,8 @@ resource "aws_cloudwatch_metric_alarm" "cache_cpu" {
140149
}
141150

142151
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"
145154
alarm_description = "Redis cluster freeable memory"
146155
comparison_operator = "LessThanThreshold"
147156
evaluation_periods = "1"
@@ -153,7 +162,7 @@ resource "aws_cloudwatch_metric_alarm" "cache_memory" {
153162
threshold = var.alarm_memory_threshold_bytes
154163

155164
dimensions = {
156-
CacheClusterId = module.label.id
165+
CacheClusterId = element(local.elasticache_member_clusters, count.index)
157166
}
158167

159168
alarm_actions = var.alarm_actions

0 commit comments

Comments
 (0)