terraform выводит несколько aws ebs_volumes

$ terraform --version
Terraform v0.11.7
+ provider.aws v1.28.0

Я хотел бы узнать, можно ли вывести все тома ebs из экземпляра AWS.

У меня есть main.tf со следующим:

data "aws_instance" "kafka_nodes" {
  filter {
    name = "tag:Name"
    values = ["mykas00*"]
  }
}

output "block_devs" {
  value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}

Вышеупомянутое печатает только один том, но я проверил с AWS CLI, что рассматриваемый экземпляр имеет несколько томов.


person Simply Seth    schedule 24.07.2018    source источник
comment
типы данных, такие как карты и списки, могут быть экспортированы следующим образом `output block_devs {value = [$ {data.aws_instance. *. ebs_block_device}]}`   -  person sothish    schedule 24.07.2018


Ответы (1)


Он печатает только один том, потому что вы настроили только один том в источнике данных. Если вы проверите файл состояния, вы, вероятно, увидите, что в нем указано только одно устройство, хотя подключено несколько устройств.

Вам необходимо настроить источник данных для каждого тома. Но это означает, что вы уже знаете количество томов. Так что, вероятно, это не выход.

Чтобы получить список всех томов, прикрепленных к любому данному экземпляру, можно использовать ресурс экземпляра вместе с идентификатором экземпляра, ami и типом экземпляра. Используйте terraform import, чтобы импортировать экземпляр в состояние. Затем используйте обновление терраформы, чтобы отобразить все тома, прикрепленные к экземпляру.

Изменять

data "aws_instance" "kafka_nodes" {
  filter {
    name = "tag:Name"
    values = ["mykas00*"]
  }
}

output "block_devs" {
  value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}

to

resource "aws_instance" "kafka_nodes" {
  ami = "<INSTANCE_AMI>"
  instance_type = "<INSTANCE_TYPE>"
  tags {
    Name = "mykas00"
  }
}

output "block_devs" {
  value = ["${aws_instance.kafka_nodes.ebs_block_device}"]
}

Добавьте ниже, если вы также хотите, чтобы в списке было корневое устройство

output "root_dev" {
  value = ["${aws_instance.kafka_nodes.root_block_device}"]
}

Тогда сделай

terraform import aws_instance.kafka_nodes [instance_id]    
terraform refresh 

Вы должны увидеть список всех устройств, подключенных к экземпляру, примерно так:

block_instance_devs = [
    {
        delete_on_termination = 0,
        device_name = /dev/sdc,
        encrypted = 0,
        iops = 100,
        snapshot_id = ,
        volume_id = vol-0ceea4f464a24d86a,
        volume_size = 8,
        volume_type = gp2
    },
    {
        delete_on_termination = 0,
        device_name = /dev/sdb,
        encrypted = 0,
        iops = 100,
        snapshot_id = ,
        volume_id = vol-0c0608cf0126f0b2b,
        volume_size = 8,
        volume_type = gp2
    },
    {
        delete_on_termination = 0,
        device_name = /dev/sdd,
        encrypted = 0,
        iops = 100,
        snapshot_id = ,
        volume_id = vol-0fe3c4c67bedf0e9e,
        volume_size = 8,
        volume_type = gp2
    }
]

И даже корневое устройство, если вы добавили для него раздел.

    root_dev = [
        {
            delete_on_termination = 1,
            iops = 100,
            volume_id = vol-0197cdd29d212c642,
            volume_size = 8,
            volume_type = gp2
        }
    ]
person Don    schedule 30.07.2018