尝试将 NACL 规则添加到使用 VPC 模块设置初始 NACL 值的项目的 Terraform 错误

Terraform errors trying to Add NACL rules to project that uses VPC Module to set initial NACL values

我遇到的问题很奇怪。我们开发了一个 VPC 模块,用于配置初始 VPC 基础设施,该基础设施用于该组织拥有的所有 30 多个 AWS 账户。我们使用此模块来提供千篇一律的 VPC 部署。然后我们可以进入并使用每个应用程序团队相对于该环境所需的任何基础设施自定义每个帐户。

每个 VPC 都有部署的组件,这些组件与本地资源、Cisco CSR 分支和 Direct Connects 中心以及一组标准的 NACL 对话

我想做的是在 VPC 模块内的 NACL 设置中添加一些额外的 aws_network_acl_rule。我在模块中输出值,我这样定义资源块:

resource "aws_network_acl_rule" "myapp-1" {
  network_acl_id = "${module.vpc.vpc_prv_app_nacl}"
  rule_number    = 300
  egress         = false
  protocol       = "-1"
  rule_action    = "allow"
  cidr_block     = "${var.on_prem_cidr}"
  from_port      = 0
  to_port        = 0
}

应用配置时发生的事情让我很困惑。我收到此错误

 aws_network_acl_rule.myapp-1: aws_network_acl_rule.myapp-1: Expected the Network ACL to have Entries, got: {
  Associations: [JSON Object]

每个模块创建的 NACL 都有现有的条目以及正确的子网关联。不确定如何处理该错误消息。

问题和解决方案非常简单。创建 nacl 资源时,如果您内联指定 nacl 规则,则它们无法扩展到初始 nacl 资源块之外。解决方案是删除内联规则并将它们放入单独的 aws_network_acl_rule 资源块中。这使我们能够轻松扩展模块 aws_network_acl。