带 Terraform 的 AWS:当每个 VPC 都是单独的 .tf 时,如何映射 VPC ID 以进行对等?

AWS with Terraform: How do I map VPC IDs for peering when each VPC is a separate .tf?

我正在使用 Terraform 部署中心辐射型 VPC 架构,其中 transit/management/infrastructure VPC 作为通信中心。

项目组织分为模块和实时环境,实时环境被拆分为每个 VPC 都有自己的子目录。我遇到的问题 运行 是在我想创建 VPC 对等资源时动态检索 VPC ID——显然,如果我在一个平面 [=22] 中实例化我的所有模块,这将不是问题=] 文件,但是,这是我要避免的事情。

是否可以使用 Terraform 解决此问题?在我看来,对于我想到的任何解决方案,都要求静态提供将两个 VPC 映射在一起的数据,但问题是 VPC ID 是在资源创建时分配的,我不会提前知道。

我是否必须展平我的 "live" .tf 文件或有其他方法吗?我的文件模式完全有问题吗?

谢谢!

我们在 "layers" 中创建了我们的环境,我们构建了 VPC 和子网的基础网络层,然后是共享基础设施层,然后是属于应用层的各个应用程序切片。现在每一层的 terraform 代码都在自己的文件夹中,并且有自己的状态文件。这使我们能够更新上层,而不必 运行 遍历整个 terraform 托管基础设施世界。

现在上层经常需要下层的值。在应用层创建 ec2 需要来自基础层的 vpc 和子网信息。我们通过 data.terraform_remote_state 来做到这一点。一个环境的所有状态文件都保存在一个具有可预测文件名的 s3 存储桶中。所以在应用程序切片中我们会做:

data "terraform_remote_state" "base" {
    backend = "s3"
    config {
        bucket = "remote-state-bucket"
        key = "environment-staging/base-layer.tfstate"
        region = "some-region"
    }
}

然后我们可以像这样获取基础层定义为输出的属性:

value = "${data.terraform_remote_state.base.some_output}"