如何将AWS报警ARN收集到Terraform中的字符串中,以便在CloudWatch仪表板创建JSON中使用?

如何将AWS报警ARN收集到Terraform中的字符串中,以便在CloudWatch仪表板创建JSON中使用?,terraform,amazon-cloudwatch,terraform-provider-aws,cloudwatch-alarms,Terraform,Amazon Cloudwatch,Terraform Provider Aws,Cloudwatch Alarms,我正在使用Terraform创建一组CloudWatch警报,如下所示: resource "aws_cloudwatch_metric_alarm" "lambda_concurrent_executions" { for_each = toset(var.function_names) alarm_name = "${each.key}-concurrent-executions" alarm_des

我正在使用Terraform创建一组CloudWatch警报,如下所示:

resource "aws_cloudwatch_metric_alarm" "lambda_concurrent_executions" {
  for_each = toset(var.function_names)

  alarm_name          = "${each.key}-concurrent-executions"
  alarm_description   = "The number of function instances that are processing events."
  namespace           = "AWS/Lambda"
  metric_name         = "ConcurrentExecutions"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  statistic           = "Sum"
  period              = "60"
  evaluation_periods  = "1"
  threshold           = "100"

  treat_missing_data = "ignore"

  dimensions = {
    FunctionName = each.key
  }

  alarm_actions = var.alarm_actions
  ok_actions    = var.alarm_actions
}

因此,它对每个函数名列表使用

接下来,我需要创建一个CloudWatch仪表板。它显然是通过提供具有相关名称()的JSON创建的:

资源“aws\u cloudwatch\u仪表板”“主”{
dashboard\u name=“我的仪表板”

Dashbody=您需要一个
用于
aws\u cloudwatch\u metric\u alarm
资源上的
循环

我用以下方法模拟了您的设置:

variable "function_names" {
  type    = list(string)
  default = ["fun-1", "fun-2", "fun-3"]
}

resource "null_resource" "lambda_concurrent_executions" {
  for_each = toset(var.function_names)

  triggers = {
    function_name = each.key
  }
}
然后,类似这样的内容使我能够为每个
生成的资源循环使用by

join(", ", [for i in null_resource.lambda_concurrent_executions : format("\"%s\"", i.id)])
因此,对于您的示例,您需要警报ARN的部分将变成:

"alarms": [${join(", ", [for a in aws_cloudwatch_metric_alarm.lambda_concurrent_executions : format("\"%s\"", a.arn)])}]
(顺便说一句,它应该也可以使用,但我只能使用传统的
for
-循环。)

"alarms": [${join(", ", [for a in aws_cloudwatch_metric_alarm.lambda_concurrent_executions : format("\"%s\"", a.arn)])}]