Первый раз задаю вопрос, поэтому, если я пропустил что-то важное, дайте мне знать!
Terraform v0.11.1 Provider .aws v0.1.4
Я пытаюсь создать несколько будильников для нескольких экземпляров. Мне было интересно, есть ли способ, чтобы конфигурация повторялась через список. Я пробовал использовать следующий код, но получаю сообщение «Ошибка: экземпляры переменных»: по умолчанию может не содержаться интерполяция ».
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)}"
}
}
Возможно ли что-то подобное с terraform, и если да, то как это лучше всего сделать?
Спасибо!
Ваша проблема
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}"]
Это либо нужно передать, либо установить статически.
Если my_instance1-5
такие же и могут быть установлены с помощью count
в них, как указано выше. Тогда лучше сделать
InstanceId = "${element(aws_instance.my_instance.*.id, count.index)}"
Было бы полезно, если бы вы показали нам код того, как вы создаете экземпляры EC2. Если они созданы с подсчетом, это должно быть проще. Если они созданы в том же шаблоне, что и этот код Cloudwatch, то опять же проще.
Если это не в том же шаблоне, вам нужно будет использовать выходы. https://www.terraform.io/docs/configuration/outputs.html Это позволяет модулю выводить информацию для использования другими модулями. Чтобы получить информацию из вывода, вам нужен источник данных, который позволит вам заглянуть внутрь файла состояния и абстрагироваться от идентификаторов экземпляров EC2. Это помогает, если вы используете удаленный сервер, например S3.
Если он находится в том же модуле и использует счетчик для создания экземпляров, то, как сказал Майк, вы можете использовать
InstanceId = "${element(aws_instance.my_instance.*.id, count.index)}"