【问题标题】:Terraform: Getting volume_id from aws_instance resourceTerraform:从 aws_instance 资源中获取 volume_id
【发布时间】:2018-03-20 22:23:50
【问题描述】:

是否可以使用 terraform 从 aws_instance ebs_block_device 资源中获取卷 ID,还是我们需要显式调用 aws_ebs_volume/aws_volume_attachment 资源?

我目前拥有的是:

resource "aws_instance" "ec2_app" {
...
  ebs_block_device {
    device_name           = "${var.app_ebs_device_name}"
    volume_type           = "${var.app_ebs_vol_type}"
    volume_size           = "${var.app_ebs_vol_size}"
    delete_on_termination = "${var.app_ebs_delete_on_termination}"
    encrypted             = "${var.app_ebs_encrypted}"
  }
...
}

我知道我可以更改为 aws_ebs_volume/aws_volume_attachment 资源,但我相信这会破坏并重新创建卷(我试图避免这种情况)。

【问题讨论】:

标签: amazon-web-services terraform


【解决方案1】:

文档在这一点上有点误导,但您可以像这样获取 ebs_block_device 的卷 id:

"${lookup(aws_instance.example.ebs_block_device[0], "volume_id")}"

【讨论】:

    【解决方案2】:

    假设您创建了如下卷:

    resource "aws_ebs_volume" "ebs-volume-1" {
        availability_zone = "eu-west-1a"
        size = 8
        type = "gp2"
        tags {
            Name = "extra volume data"
        }
    

    可以通过指定获取卷ID

    volume_id = "${aws_ebs_volume.ebs-volume-1.id}"
    

    【讨论】:

    • 这不是 OP 提出的问题。如果你有一个 ec2 实例 ID,你能得到附加的卷 ID 吗?
    • @innocent-anigbo 我目前拥有的是:resource "aws_instance" "resource_name" { ..... ebs_block_device { device_name = "${var.indexer_ebs_device_name}" volume_type = "${var.indexer_ebs_vol_type}" volume_size = "${var.indexer_ebs_vol_size}" delete_on_termination = "${var.indexer_ebs_delete_on_termination}" encrypted = "${var.indexer_ebs_encrypted}" } ... } 除了更改为您所说的内容(我相信这会破坏并重新创建量)?
    猜你喜欢
    • 2018-11-06
    • 2018-07-09
    • 2020-02-21
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2020-03-26
    • 2021-07-16
    相关资源
    最近更新 更多