如何在 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

基础设施的创建顺序是:

  1. terraform apply 在 /host
  2. 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

到目前为止我尝试了什么

  1. 我想到了用Ouput Values and Data Sources:

    host/outputs.tf 中声明为输出的项目 ID 为:

    output "project_id" {
        value = google_project.host_project.project_id
     }
    

    但后来我不知道如何在 env/dev/main.tf

    中实现此输出
  2. 我考虑过数据源,并在 env/dev/main.tf 中获取宿主项目 ID。但是,为了获取它,我需要它的名称(如果我必须对其进行硬编码,这会破坏以编程方式提供它的目的)。

接下来我应该尝试什么?我缺少什么?

env/dev 文件夹下的文件看不到上面的任何内容,只能看到任何引用的模块。
可以host文件夹重构为一个模块以允许访问它的输出...但是这增加了主机的风险每当您破坏开发环境时都会被破坏。
在创建主机并将其通过管道传输到文本文件或环境变量后,我会尝试 运行 terraform output -raw project_id 。然后将其用作 'env/dev' 部署中新“host_project”或类似变量的输入。