使用Terraform从AMI获取附加卷设备\u名称

使用Terraform从AMI获取附加卷设备\u名称,terraform,amazon-ami,Terraform,Amazon Ami,拥有一个具有附加卷的AMI,并且需要获取此附加卷的设备名称 我的地形代码: data "aws_ami" "example" { owners = [270245543446] } output "example1" { value = data.aws_ami.example.block_device_mappings } 输出为: example1 = [ { "device_name" = "/dev/sda1" "ebs" = { "dele

拥有一个具有附加卷的AMI,并且需要获取此附加卷的设备名称

我的地形代码:

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\u ami.example.block\u device\u映射[“/dev/sde”]。device\u name
但在这种情况下,我应该知道需要的设备名称

无法完全理解此处的“#”是索引的符号。在您的示例中,可以使用0或1。或者您可以使用*获取所有姓名的列表

value = data.aws_ami.example.block_device_mappings[1].device_name
将为您提供所需的结果。

我的解决方案: 如果我们将动态块与for_一起使用,我们可以防止向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
    }

不幸的是,这不起作用。输出为:``在main.tf第17行,以局部变量表示:17:value=data.aws\u ami.example.block\u device\u映射[1]。device\u name此值没有任何索引```谢谢分享,并为我的miguiding帖子感到抱歉