带 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}"
我正在使用 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}"