使用Terraform从AMI获取附加卷设备\u名称
拥有一个具有附加卷的AMI,并且需要获取此附加卷的设备名称 我的地形代码:使用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
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帖子感到抱歉