无法在 Terraform v0.13 中使用 for_each 迭代安全组

Unable to iterate security group using for_each in Terraform v0.13

我正在尝试使用 for_each 键值对,但收到类似此对象没有名为“destination_address_prefix”的属性的错误。此对象没有名为“source_address_prefix”的属性。

resource "azurerm_network_security_group" "nsg" {
  
  
  name                = "testsg"
  location            = "east us"
  resource_group_name = "test-rg"
  
 dynamic security_rule {
    for_each = var.securitygroup
    content {
    name                       = security_rule.name
    priority                   = security_rule.priority
    direction                  = security_rule.direction
    access                     = security_rule.access
    protocol                   = security_rule.protocol
    source_port_range          = security_rule.source_port_range
    destination_port_range     = security_rule.destination_port_range
    source_address_prefix      = security_rule.source_address_prefix
    destination_address_prefix = security_rule.destination_address_prefix

    }

  }

}

Var.tf:

variable "securitygroup" {

    type = map 
    default = {
    name                       = "test123"
    priority                   = "100"
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "*"
    source_address_prefix      = "*"
    destination_address_prefix = "*"   

    }

}

对于您的用例,您不需要动态块,因为您只有一个规则,除了这条规则中的个别项目外,没有什么可以迭代的。因此它应该是:

resource "azurerm_network_security_group" "nsg" {
    
  name                = "testsg"
  location            = "east us"
  resource_group_name = "test-rg"
  
 security_rule  {
    name                       = var.securitygroup.name
    priority                   = var.securitygroup.priority
    direction                  = var.securitygroup.direction
    access                     = var.securitygroup.access
    protocol                   = var.securitygroup.protocol
    source_port_range          = var.securitygroup.source_port_range
    destination_port_range     = var.securitygroup.destination_port_range
    source_address_prefix      = var.securitygroup.source_address_prefix
    destination_address_prefix = var.securitygroup.destination_address_prefix
   }
  }
}

您的变量不是列表或集合类型的变量,它是单一对象类型的变量,因此您的azurerm_network_security_group不需要迭代逻辑,示例如下:

resource "azurerm_network_security_group" "nsg" {
  
  name                = "testsg"
  location            = "east us"
  resource_group_name = "test-rg"

  security_rule = var.securitygroup

}