Terraform “我怎样做尺寸标注块”;动态的;?
想知道如何使aws\u cloudwatch\u metric\u报警资源中的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
维度
块“动态”。
到目前为止,我确信代码不会起作用。。。但是我想问一下,应该如何写才能实现目标
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"]
}
}