如何在 Terraform 中使用来自其他模块的变量:将宿主项目 ID 添加到服务项目。 (全球控制点)
How to use variables from other modules in Terraform: Adding Host Project id to the Service Projects. (GCP)
我的基础设施由一个宿主项目和几个使用其共享VPC服务项目组成=66=].
我重构了我的 .tf
基础设施文件,如下所示:
├── env
| ├── dev
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
│ ├── pre
│ └── pro
├── host
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfvars
│ └── variables.tf
└── modules
├── compute
├── network
└── projects
基础设施的创建顺序是:
terraform apply
在 /host
terraform apply
in /env/dev (例如)
在主机目录的 main.tf
中,我创建了 VPC 并启用了共享 VPC 托管:
# Creation of the hosted network
resource "google_compute_network" "shared_network" {
name = var.network_name
auto_create_subnetworks = false
project = google_compute_shared_vpc_host_project.host_project.project
mtu = "1460"
}
# Enable shared VPC hosting in the host project.
resource "google_compute_shared_vpc_host_project" "host_project" {
project = google_project.host_project.project_id
depends_on = [google_project_service.host_project]
}
当我在 服务项目 中引用共享 VPC 网络时出现问题。
在 env/dev/
的 main.tf
中,我设置了以下内容:
resource "google_compute_shared_vpc_service_project" "service_project_1" {
host_project = google_project.host_project.project_id
service_project = google_project.service_project_1.project_id
depends_on = [
google_compute_shared_vpc_host_project.host_project,
google_project_service.service_project_1,
]
}
问题
如何从服务项目中的另一个目录引用宿主项目 ID?
到目前为止我尝试了什么
我想到了用Ouput Values and Data Sources:
在 host/outputs.tf
中声明为输出的项目 ID 为:
output "project_id" {
value = google_project.host_project.project_id
}
但后来我不知道如何在 env/dev/main.tf
中实现此输出
我考虑过数据源,并在 env/dev/main.tf
中获取宿主项目 ID。但是,为了获取它,我需要它的名称(如果我必须对其进行硬编码,这会破坏以编程方式提供它的目的)。
接下来我应该尝试什么?我缺少什么?
env/dev
文件夹下的文件看不到上面的任何内容,只能看到任何引用的模块。
您可以将host
文件夹重构为一个模块以允许访问它的输出...但是这增加了主机的风险每当您破坏开发环境时都会被破坏。
在创建主机并将其通过管道传输到文本文件或环境变量后,我会尝试 运行 terraform output -raw project_id
。然后将其用作 'env/dev' 部署中新“host_project”或类似变量的输入。
我的基础设施由一个宿主项目和几个使用其共享VPC服务项目组成=66=].
我重构了我的 .tf
基础设施文件,如下所示:
├── env
| ├── dev
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
│ ├── pre
│ └── pro
├── host
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfvars
│ └── variables.tf
└── modules
├── compute
├── network
└── projects
基础设施的创建顺序是:
terraform apply
在 /hostterraform apply
in /env/dev (例如)
在主机目录的 main.tf
中,我创建了 VPC 并启用了共享 VPC 托管:
# Creation of the hosted network
resource "google_compute_network" "shared_network" {
name = var.network_name
auto_create_subnetworks = false
project = google_compute_shared_vpc_host_project.host_project.project
mtu = "1460"
}
# Enable shared VPC hosting in the host project.
resource "google_compute_shared_vpc_host_project" "host_project" {
project = google_project.host_project.project_id
depends_on = [google_project_service.host_project]
}
当我在 服务项目 中引用共享 VPC 网络时出现问题。
在 env/dev/
的 main.tf
中,我设置了以下内容:
resource "google_compute_shared_vpc_service_project" "service_project_1" {
host_project = google_project.host_project.project_id
service_project = google_project.service_project_1.project_id
depends_on = [
google_compute_shared_vpc_host_project.host_project,
google_project_service.service_project_1,
]
}
问题
如何从服务项目中的另一个目录引用宿主项目 ID?
到目前为止我尝试了什么
我想到了用Ouput Values and Data Sources:
在
host/outputs.tf
中声明为输出的项目 ID 为:output "project_id" { value = google_project.host_project.project_id }
但后来我不知道如何在
中实现此输出env/dev/main.tf
我考虑过数据源,并在
env/dev/main.tf
中获取宿主项目 ID。但是,为了获取它,我需要它的名称(如果我必须对其进行硬编码,这会破坏以编程方式提供它的目的)。
接下来我应该尝试什么?我缺少什么?
env/dev
文件夹下的文件看不到上面的任何内容,只能看到任何引用的模块。
您可以将host
文件夹重构为一个模块以允许访问它的输出...但是这增加了主机的风险每当您破坏开发环境时都会被破坏。
在创建主机并将其通过管道传输到文本文件或环境变量后,我会尝试 运行 terraform output -raw project_id
。然后将其用作 'env/dev' 部署中新“host_project”或类似变量的输入。