terraform输出多个aws ebs_volumes

时间:2018-07-24 17:27:24

标签: amazon-web-services terraform terraform-provider-aws

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

我想确定是否可以从AWS实例输出所有ebs卷。

我的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验证了所涉及的实例具有多个卷

1 个答案:

答案 0 :(得分:1)

它仅打印一个卷,因为您仅在数据源中设置了一个卷。如果您检查状态文件,即使连接了多个设备,您也可能会看到它仅列出了1个设备。

您需要为每个卷设置一个数据源。但是,这意味着您已经知道卷的数量。因此,这可能不是要走的路。

一种获取附加到任何给定实例的所有卷的列表的方法是使用实​​例资源以及实例ID,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}"
}

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
        }
    ]