【发布时间】:2020-06-10 03:16:55
【问题描述】:
我有一个动态嵌套块来在网络 ACL 中创建入口规则列表:
resource "aws_network_acl" "network_acl" {
vpc_id = aws_vpc.vpc.id
dynamic "ingress" {
for_each = var.ssh_cidr_blocks
iterator = cidr
content {
rule_no = 100
protocol = "tcp"
action = "allow"
cidr_block = cidr.value
from_port = 22
to_port = 22
}
}
}
可以看出,我正在为var.ssh_cidr_blocks 中的每个 CIDR 生成一个入口。
但这不起作用,AWS 会发回一条消息,指出 rule_no 必须是唯一的:
Error: Error creating ingress entry: NetworkAclEntryAlreadyExists: The network acl entry identified by 100 already exists.
status code: 400, request id: c9b4b5ad-c1a9-4a85-a4e0-b0559e14ea53
我有点困惑,因为动态入口规则中的网络 ACL 是动态嵌套块的类用例。然而,这似乎是不可能的!
有什么办法吗?
【问题讨论】:
-
rule_no用于规则的排序(某种优先级),它们必须是唯一的。如果您不关心排序,我想您可以创建一个映射变量并包含一个“假”索引。不过,我想知道在主资源块中使用for_each是否更好(即创建许多network_acl资源,每个资源都有一个带有rule_no = 100的单一入口规则;不使用dynamic)(我不是确定这也行得通——rule_no会因不同的 acl 发生冲突吗?)
标签: terraform