代码之家  ›  专栏  ›  技术社区  ›  Simply Seth

terraform输出多个aws ebs U卷

  •  0
  • Simply Seth  · 技术社区  · 6 年前
    $ 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 回复  |  直到 6 年前
        1
  •  1
  •   Don    6 年前

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

    您需要为每个卷设置一个数据源。但是,这意味着您已经知道卷的数量。所以,这可能不是办法。

    获取连接到任何给定实例的所有卷的列表的方法是使用实例资源以及实例id、ami和实例类型使用 地形导入 将实例导入到状态然后使用 地形刷新 以显示连接到实例的所有卷。

    变化

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