Проблема здесь в том, что когда count
для aws_instance.ec2
увеличено до 2, экспорт атрибута ресурса изменяется со строки на список, и вы все равно ссылаетесь на него как на строку. Вы можете увидеть больше информации об этом в документации здесь .
Обновив ресурсы volume_attachment
и ebs_volume
, ожидая список вместо строки и повторяя итерацию соответственно ресурсу aws_instance
, вы можете решить вашу проблему:
# Create EBS volume
resource "aws_ebs_volume" "ebs_volume" {
count = "${var.ec2_create_volume == "true" ? 1 : 0}"
availability_zone = "${aws_instance.ec2.*.availability_zone[count.index]}"
size = "${var.ec2_ebs_volume_size}"
}
# Attach EBS Volume
resource "aws_volume_attachment" "volume_attachment" {
count = "${var.ec2_create_volume == "true" ? 1 : 0}"
device_name = "${var.ec2_device_name}"
volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}"
instance_id = "${aws_instance.ec2.*.id[count.index]}"
}
Обратите внимание, что это по-прежнему работает правильно, даже если count
равно 1. Рекомендуется также синхронизировать count
ресурса aws_instance
с count
двух других, чтобы убедиться, что они являются то же самое.
# Create EBS volume
resource "aws_ebs_volume" "ebs_volume" {
count = "${var.ec2_instance_count}"
availability_zone = "${aws_instance.ec2.*.availability_zone[count.index]}"
size = "${var.ec2_ebs_volume_size}"
}
# Attach EBS Volume
resource "aws_volume_attachment" "volume_attachment" {
count = "${var.ec2_instance_count}"
device_name = "${var.ec2_device_name}"
volume_id = "${aws_ebs_volume.ebs_volume.*.id[count.index]}"
instance_id = "${aws_instance.ec2.*.id[count.index]}"
}
Объединение входной переменной вместе гарантирует, что вы будете иметь желаемое поведение при изменении количества экземпляров, и что нежелательные проблемы и побочные эффекты, следовательно, не возникнут.