0

我正在为我的公司 aws 基础设施使用 terraform 和 terragrunt,一般结构是这样的,我有两个主文件夹,一个用于模块,另一个用于环境和使用 terragrunt 将模块采购到环境文件夹,一个模块用于通用 vpc 基础设施,我有单独的 vpc 对等模块,我在环境文件夹中为 vpc 和 vpc 对等创建了单独的文件夹,所以它们在 s3 上都有不同的 terraform 状态,问题是 vpc 对等也在创建路由表,当我想要要在 vpc 模块上应用一些更改,它会删除从 vpc 对等模块创建的记录,有没有办法将路由表注入 vpc 模块?我知道我可以将 vpc-peering 模块移动到 vpc 中并同时拥有一个模块,但是重写所有的东西需要相当长的时间,我很想知道任何其他方式。

4

2 回答 2

1

他们不应该都创建路由表。VPC 模块应该创建路由表,VPC 对等模块应该向这些路由表添加路由。这里的技巧是不在aws_route_table资源中创建任何路由,而是将它们全部创建为单独的aws_route资源。aws_route 根据文档中的注释:

Terraform 目前提供独立的 Route 资源和 Route Table 资源,其中包含内联定义的路由。目前,您不能将带有内联路由的路由表与任何路由资源一起使用。这样做会导致规则设置冲突,并会覆盖规则。

因此,为了在多个模块中定义路由,您需要将aws_route资源用于所有路由定义。

于 2021-02-05T12:57:26.497 回答
-1

我不确定您是否使用 git 作为 terraform 的源代码,如果是,那么您可以将模块保存在单独的 git 存储库中,并根据需要调用路由表模块。

例如。:

resouces "aws_route" "public_igw_route" {
  source = "git@github.com:user/infra-modules.git//aws-route"
}

于 2021-02-05T13:27:34.710 回答