我在声明嵌套变量时遇到问题。我有一个.tfvars作为我的变量,然后我在varables.tf中声明它,最后,我有我的aws实例资源在我的变量中循环。我的问题是,我的.tfvar中的嵌套卷块没有被声明,并出现错误。
地形.tfvar
instances = {
instance-01a = {
ami = "ami-abcdefghijk1234",
type = "t3.medium"
key_name = "caws-dc-01"
private_ip = "10.0.0.5"
subnet_id = "subnet-abcdefghijk1234" #Temp
vpc_security_group_ids = ["sg-abcdefghijk1234"] #Temp
root_block_device = {
device_name = "/dev/sda1"
volume_size = 100
volume_type = "gp2"
tags = {
Name = "instance-01a /dev/sda1"
}
}
ebs_block_device = {
device_name = "/dev/sdf"
volume_size = 50
volume_type = "gp2"
tags = {
Name = "instance-01a /dev/sdf"
}
}
disable_api_termination = true
tags = {
Name = "instance-01a"
}
}
变量.tf
variable "instances" {}
实例.tf
resource "aws_instance" "specific_instances" {
for_each = var.instances
ami = each.value["ami"]
instance_type = each.value["type"]
key_name = each.value["key_name"]
private_ip = each.value["private_ip"]
subnet_id = each.value["subnet_id"]
vpc_security_group_ids = each.value["vpc_security_group_ids"]
root_block_device = each.value["root_block_device"]
ebs_block_device = each.value["ebs_block_device"]
disable_api_termination = each.value["disable_api_termination"]
tags = each.value["tags"]
}
错误消息
╷
│ Error: Unsupported argument
│
│ on instance.tf line 13, in resource "aws_instance" "specific_instances":
│ 13: root_block_device = each.value["root_block_device"]
│
│ An argument named "root_block_device" is not expected here. Did you mean to define a block of type
│ "root_block_device"?
╵
╷
│ Error: Unsupported argument
│
│ on instance.tf line 14, in resource "aws_instance" "specific_instances":
│ 14: ebs_block_device = each.value["ebs_block_device"]
│
│ An argument named "ebs_block_device" is not expected here. Did you mean to define a block of type
│ "ebs_block_device"?
╵
ebs_block_device是block
,而不是参数。因此,这意味着您必须执行以下操作:
resource "aws_instance" "specific_instances" {
for_each = var.instances
# rest
# ....
ebs_block_device {
device_name = each.value["ebs_block_device"]["device_name"]
volume_size = each.value["ebs_block_device"]["volume_size"]
volume_type = each.value["ebs_block_device"]["volume_type"]
tags = each.value["ebs_block_device"]["tags"]
}
}