![](/img/trans.png)
[英]invalid CIDR address in terraform aws_security_group resource with cidr_blocks from file
[英]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.