如何使用Terraform中其他模块的变量:将主机项目id添加到服务项目中.(GCP)



我的基础设施由一个主机项目和几个使用其共享VPC

服务项目我重构了基础结构的.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 applyin/host
  2. /env/dev中的terraform apply(例如(

在主机目录的main.tf中,我创建了专有网络并启用了共享专有网络托管:

# 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]
}

当我在服务项目中提到共享专有网络时,就会出现这个问题。

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值和数据源:

    在声明为输出的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。然后使用它作为新的"0"的输入;主机_项目";或"env/dev"部署中的类似变量。

最新更新