Criar vários recursos terraform

1

Primeira vez fazendo uma pergunta, então se eu deixar algo importante, me avise!

Terraform v0.11.1 provider.aws v0.1.4

Estou tentando criar vários alarmes do cloudwatch para várias instâncias. Eu queria saber se havia uma maneira de ter a configuração iterando através de uma lista. Eu tentei usar o seguinte código, mas recebo "Error: variable" instâncias ": padrão não pode conter interpolações".

variable "instances" {
  description = "Run the EC2 Instances in these Availability Zones"
  type = "list"
  default = ["${aws_instance.my_instance1.id}", "${aws_instance.my_instance2.id}", "${aws_instance.my_instance3.id}", "${aws_instance.my_instance4.id}", "${aws_instance.my_instance5.id}"]
}

############ Cloudwatch monitoring 
resource "aws_cloudwatch_metric_alarm" "cpu" {
  count                     = 5
  alarm_name                = "terraform-cpu-high-test"
  comparison_operator       = "GreaterThanOrEqualToThreshold"
  evaluation_periods        = "2"
  metric_name               = "CPUUtilization"
  namespace                 = "AWS/EC2"
  period                    = "180"
  statistic                 = "Average"
  threshold                 = "80"
  alarm_description         = "This metric monitors ec2 cpu utilization"
  insufficient_data_actions = []
  dimensions {
    InstanceId = "${element(var.instances, count.index)}"
  }
} 

É algo parecido com isso possível com o terraform e, em caso afirmativo, qual é a melhor maneira de fazer isso?

Obrigado!

    
por Matthew Slater 11.12.2017 / 18:49

1 resposta

2

Seu problema é

default = ["${aws_instance.my_instance1.id}", "${aws_instance.my_instance2.id}", "${aws_instance.my_instance3.id}", "${aws_instance.my_instance4.id}", "${aws_instance.my_instance5.id}"]

Isso precisa ser transmitido ou definido estaticamente.

Se my_instance1-5 forem iguais e puderem ser definidos com count , como acima. Então é melhor fazer

InstanceId = "${element(aws_instance.my_instance.*.id, count.index)}"
    
por 11.12.2017 / 22:15

Tags