Terraform “我怎样做尺寸标注块”;动态的;?

Terraform “我怎样做尺寸标注块”;动态的;?,terraform,amazon-cloudwatch,Terraform,Amazon Cloudwatch,想知道如何使aws\u cloudwatch\u metric\u报警资源中的维度块“动态”。 到目前为止,我确信代码不会起作用。。。但是我想问一下,应该如何写才能实现目标 locals { backend_tg_name = data.terraform_remote_state.network.outputs.backend_tg_name frontend_tg_name = data.terraform_remote_state.network.outputs.frontend

想知道如何使aws\u cloudwatch\u metric\u报警资源中的
维度
块“动态”。 到目前为止,我确信代码不会起作用。。。但是我想问一下,应该如何写才能实现目标

locals {
  backend_tg_name  = data.terraform_remote_state.network.outputs.backend_tg_name
  frontend_tg_name = data.terraform_remote_state.network.outputs.frontend_tg_name
  webadmin_tg_name = data.terraform_remote_state.network.outputs.webadmin_tg_name

  dimensions = [
    {
      LoadBalancer = data.terraform_remote_state.network.outputs.alb_suffix
      TargetGroup  = data.terraform_remote_state.network.outputs.backend_tg_suffix
    },
    {
      LoadBalancer = data.terraform_remote_state.network.outputs.alb_suffix
      TargetGroup  = data.terraform_remote_state.network.outputs.frontend_tg_name
    },
    {
      LoadBalancer = data.terraform_remote_state.network.outputs.alb_suffix
      TargetGroup  = data.terraform_remote_state.network.outputs.webadmin_tg_suffix
    }
  ]

}

resource "aws_cloudwatch_metric_alarm" "httpcode_target_5xx_count" {
  for_each = {
    backend_tg_name  = local.backend_tg_name
    frontend_tg_name = local.frontend_tg_name
    webadmin_tg_name = local.webadmin_tg_name
  }

  alarm_name          = format("ALB: High amount of 5XX errors on target group %s", each.value)
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = var.tg_evaluation_periods
  metric_name         = "HTTP_Code_Target_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = var.tg_period
  statistic           = "Sum"
  threshold           = var.tg_5xx_threshhold
  alarm_description   = "Average API 5XX target group error code count is too high"
  alarm_actions       = aws_sns_topic.infra_monitoring.arn
  ok_actions          = aws_sns_topic.infra_monitoring.arn
  treat_missing_data  = "notBreaching"

  dimensions = {
    "LoadBalancer" = ???
    "TargetGroup"  = ???
  }
}
如何更改尺寸和/或局部块?我想迭代三次,为同一ALB后面的三个不同目标组创建三个相同的警报。
请帮忙。

这似乎有效,希望能帮上忙:

locals {
  alb_suffix = data.terraform_remote_state.network.outputs.alb_suffix
  tg_alarms = {
    "backend_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.backend_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.backend_tg_suffix
    },
    "frontend_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.frontend_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.frontend_tg_name
    },
    "webadmin_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.webadmin_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.webadmin_tg_suffix
    }
  }
}

resource "aws_cloudwatch_metric_alarm" "httpcode_target_5xx_count" {
  for_each = local.tg_alarms

  alarm_name          = format("ALB: High amount of 5XX errors on target group %s", each.value["tg_name"])
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = var.tg_evaluation_periods
  datapoints_to_alarm = var.tg_datapoints_to_alarm
  metric_name         = "HTTPCode_Target_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = var.tg_period
  statistic           = "Sum"
  threshold           = var.tg_5xx_threshold
  alarm_description   = "Average API 5XX target group error code count is too high"
  alarm_actions       = [aws_sns_topic.infra_monitoring.arn]
  ok_actions          = [aws_sns_topic.infra_monitoring.arn]
  treat_missing_data  = "notBreaching"

  dimensions = {
    "LoadBalancer" = local.alb_suffix
    "TargetGroup"  = each.value["tg_suffix"]
  }
}

看来这是可行的,希望能有所帮助:

locals {
  alb_suffix = data.terraform_remote_state.network.outputs.alb_suffix
  tg_alarms = {
    "backend_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.backend_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.backend_tg_suffix
    },
    "frontend_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.frontend_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.frontend_tg_name
    },
    "webadmin_tg" = {
      tg_name   = data.terraform_remote_state.network.outputs.webadmin_tg_name
      tg_suffix = data.terraform_remote_state.network.outputs.webadmin_tg_suffix
    }
  }
}

resource "aws_cloudwatch_metric_alarm" "httpcode_target_5xx_count" {
  for_each = local.tg_alarms

  alarm_name          = format("ALB: High amount of 5XX errors on target group %s", each.value["tg_name"])
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = var.tg_evaluation_periods
  datapoints_to_alarm = var.tg_datapoints_to_alarm
  metric_name         = "HTTPCode_Target_5XX_Count"
  namespace           = "AWS/ApplicationELB"
  period              = var.tg_period
  statistic           = "Sum"
  threshold           = var.tg_5xx_threshold
  alarm_description   = "Average API 5XX target group error code count is too high"
  alarm_actions       = [aws_sns_topic.infra_monitoring.arn]
  ok_actions          = [aws_sns_topic.infra_monitoring.arn]
  treat_missing_data  = "notBreaching"

  dimensions = {
    "LoadBalancer" = local.alb_suffix
    "TargetGroup"  = each.value["tg_suffix"]
  }
}