簡體   English   中英

條件表達式在 aws_security_group 資源出口塊 terraform 中不起作用

[英]Conditional Expression not working in aws_security_group resource egress block terraform

對於資源 aws_security_group ,我想添加出口塊以僅在創建入口規則時運行。 下面我使用 count 為 egress 塊應用了條件,然后嘗試使用 for_each ,但我收到錯誤:這里分別不需要名為“count”或“for_each”的參數。 有人可以幫助我如何實現這一目標

代碼

  egress {
    #for_each             = (length(split(",", var.ingress_ports_udp)) != 0 && length(split(",", var.ingress_ports_udp)) != 0) ? ["1"] : []
    from_port         = 0
    to_port           = 0
    protocol          = "-1"
    cidr_blocks       = ["0.0.0.0/0"]
  }

您正在尋找動態塊 它看起來像這樣:

resource "aws_security_group" "mygroup" {
  name        = "mygroup"
  vpc_id      = aws_vpc.main.id

  dynamic "egress" {
    for_each = (condition) ? [1] : []
    content {
      from_port         = 0
      to_port           = 0
      protocol          = "-1"
      cidr_blocks       = ["0.0.0.0/0"]
    }
  }
}

你的情況看起來很奇怪。 首先,您要檢查兩次完全相同的條件( length(split(",", var.ingress_ports_udp)) != 0似乎是重復的),其次, split永遠不會返回長度為 0 的列表(如果給出一個空字符串,它將返回一個包含一個元素的列表,它本身就是一個空字符串)。 您可以在拆分文檔頁面上看到這一點,第三個示例:

> split(",", "")
[
  "",
]

所以你的條件永遠不會是false ,無論var.ingress_ports_udp的值是什么。 您可以使用compact(split(",", var.ingress_ports_udp))來處理這個問題( compact將刪除任何為空字符串的列表元素)。

我建議將var.ingress_ports_udp作為數字列表傳入,而不是作為在模塊中拆分的字符串。 然后你可以簡單地使用length(var.ingress_ports_udp) > 0 ? [1] : [] length(var.ingress_ports_udp) > 0 ? [1] : []

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM