首页 > 解决方案 > 使用 Terraform 从 AMI 获取附加卷 device_name

问题描述

有一个带有附加卷的 AMI,需要获取 device_name 这个附加卷。

我的地形代码:

data "aws_ami" "example" {

  owners = [270245543446]
}

output "example1" {
  value = data.aws_ami.example.block_device_mappings
}

输出是:

example1 = [
  {
    "device_name" = "/dev/sda1"
    "ebs" = {
      "delete_on_termination" = "false"
      "encrypted" = "false"
      "iops" = "0"
      "snapshot_id" = "snap-0b4eedb04c8976458"
      "volume_size" = "8"
      "volume_type" = "gp2"
    }
    "no_device" = ""
    "virtual_name" = ""
  },
  {
    "device_name" = "/dev/sde"
    "ebs" = {
      "delete_on_termination" = "false"
      "encrypted" = "false"
      "iops" = "0"
      "snapshot_id" = ""
      "volume_size" = "8"
      "volume_type" = "gp2"
    }
    "no_device" = ""
    "virtual_name" = ""
  },
]

就我而言,我需要获得输出 - “/dev/sde”。请帮助找到解决方案。

我也尝试过 value = data.aws_ami.example.block_device_mappings["/dev/sde"].device_name ,但在这种情况下,我应该知道需要的 device_name。

无法完全理解#这里的含义https://www.terraform.io/docs/providers/aws/d/ami.html#block_device_mappings-device_name

标签: terraformamazon-ami

解决方案


我的解决方案:如果我们将动态块与 for_each 一起使用,我们可以防止向 AMI 添加额外的卷并使所有卷都加密。

  dynamic "ebs_block_device" {
    for_each = [
      for i in data.aws_ami.example.block_device_mappings: {
        device_name = i.device_name
      }
      if i.device_name != data.aws_ami.example.root_device_name
      ]
    content {
      device_name = ebs_block_device.value.device_name
      encrypted = true
    }

推荐阅读