【问题标题】:How to loop within a nested block in terraform如何在terraform中的嵌套块内循环
【发布时间】:2020-10-06 20:01:39
【问题描述】:

我无法理解如何为下面的资源创建循环。我需要基于嵌套在“dimentions”块中的变量“instance”创建多个资源。根据我阅读一些文档后的理解,我应该使用 for_each 参数,但是我似乎无法弄清楚。

resource "aws_cloudwatch_metric_alarm" "disk_percentage_low" {
  alarm_name                = "disk_percentage_low"
  comparison_operator       = "LessThanOrEqualToThreshold"
  evaluation_periods        = "1"
  metric_name               = "disk_used_percent"
  namespace                 = "AWS/CWAgent"
  period                    = "60"
  statistic                 = "Average"
  threshold                 = "20"
  alarm_description         = "This metric monitors ec2 disk utilization"
  actions_enabled           = "true" 
  alarm_actions             = [aws_sns_topic.disk_alarm.arn]
  insufficient_data_actions = []
 
  dynamic = "dimensions" {
    for_each = var.instance
    content { 
      instanceid   = var.instanceid
      instancetype = var.instancetype
      imageid      = var.imageid
      instance     = var.instance.value 
    }
  }  
 }

variable "instance" {
  type = list
  default = ["E:" , "D:"]
} 

 

我很确定我做错了,但我已经搞砸了几天,并尝试了一些不同的方法,但似乎都不起作用。任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    您不能在 aws_cloudwatch_metric_alarm 的单个警报中使用多个维度。您的dimension 只能是:

      dimensions = 
          instanceid   = var.instanceid
          instancetype = var.instancetype
          imageid      = var.imageid
          instance     = var.instance[0]
        }
    

      dimensions = 
          instanceid   = var.instanceid
          instancetype = var.instancetype
          imageid      = var.imageid
          instance     = var.instance[1]
        }
    

    如果您想为var.instance 中的两个值设置警报,您必须创建 *两个警报

    resource "aws_cloudwatch_metric_alarm" "disk_percentage_low" {
    
      for_each                  = toset(var.instance)
    
      alarm_name                = "disk_percentage_low"
      comparison_operator       = "LessThanOrEqualToThreshold"
      evaluation_periods        = "1"
      metric_name               = "disk_used_percent"
      namespace                 = "AWS/CWAgent"
      period                    = "60"
      statistic                 = "Average"
      threshold                 = "20"
      alarm_description         = "This metric monitors ec2 disk utilization"
      actions_enabled           = "true" 
      alarm_actions             = [aws_sns_topic.disk_alarm.arn]
      insufficient_data_actions = []
     
      dimensions = {
          instanceid   = var.instanceid
          instancetype = var.instancetype
          imageid      = var.imageid
          instance     = each.value
        } 
     }
    

    【讨论】:

    • 感谢您的快速回复。我刚刚尝试过,我收到以下错误:错误:alert.tf 第 15 行不支持的块类型,在资源“aws_cloudwatch_metric_alarm”“disk_percentage_low”:15:动态“维度”{不需要“维度”类型的块在这里。
    • 这是我之前遇到的一个错误,这就是我在“尺寸”之后添加等号的原因。但是这样做会引发以下错误:在 alert.tf 第 15 行,在资源 "aws_cloudwatch_metric_alarm" "disk_percentage_low": 15: dynamic = "dimensions" { 参数定义必须以换行符结尾。
    • @ish 我现在看到了。让我删除我的答案。
    • 非常感谢您的工作!我使用后一个选项创建了两个警报,以便可以将这段代码应用于任何实例,而不管实例有多少磁盘分区。
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 2021-07-08
    • 2020-12-03
    • 2019-09-26
    • 2022-01-11
    • 2021-03-27
    • 2021-10-06
    • 2021-12-29
    相关资源
    最近更新 更多