如何使用Terraform为GCP中的实例添加私有IP输出?

如何使用Terraform为GCP中的实例添加私有IP输出?,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我在输出中的TF代码中定义了此输出。TF: output "ip" { value = google_compute_address.vm_private_ip.address } // Launch an MS SQL Server into GCP // Configure the Google Cloud provider provider "google" { credentials = file("mycreds.json&q

我在
输出中的TF代码中定义了此输出。TF

output "ip" {
  value = google_compute_address.vm_private_ip.address
}
// Launch an MS SQL Server into GCP
// Configure the Google Cloud provider
provider "google" {
  credentials = file("mycreds.json")
  project     = var.project
  region      = var.region
}

// Terraform plugin for creating random ids
resource "random_id" "instance_id" {
 byte_length = 8
}

// A single Compute Engine instance
resource "google_compute_instance" "default" {
  name         = var.instance_name
  machine_type = var.machine_type
  zone         = var.zone
  tags         = [var.instance_name, var.env_name]
  boot_disk {
    initialize_params {
    size =  var.boot_disk_size
    image = data.google_compute_image.sqlserverimage.self_link
    }

    }

  network_interface {
  subnetwork = var.subnetwork
  subnetwork_project = var.subnetwork_project
 }
}

data "google_compute_image" "sqlserverimage" {
  family  = var.image_family
  project = var.project
}

// Create additional disks
resource "google_compute_disk" "datadisk" {
  name  = var.data_disk_name
  type  = var.data_disk_type
  size  = var.data_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

resource "google_compute_disk" "backupdisk" {
  name  = var.backup_disk_name
  type  = var.backup_disk_type
  size  = var.backup_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

resource "google_compute_disk" "logdisk" {
  name  = var.log_disk_name
  type  = var.log_disk_type
  size  = var.log_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

// Attach additional disks
resource "google_compute_attached_disk" "datadiskattach" {
  disk = google_compute_disk.datadisk.id
  instance = google_compute_instance.default.id
}

resource "google_compute_attached_disk" "backupdiskattach" {
  disk = google_compute_disk.backupdisk.id
  instance = google_compute_instance.default.id
}

resource "google_compute_attached_disk" "logdiskattach" {
  disk = google_compute_disk.logdisk.id
  instance = google_compute_instance.default.id
}
这是我用来在
main.tf
中创建实例的代码:

output "ip" {
  value = google_compute_address.vm_private_ip.address
}
// Launch an MS SQL Server into GCP
// Configure the Google Cloud provider
provider "google" {
  credentials = file("mycreds.json")
  project     = var.project
  region      = var.region
}

// Terraform plugin for creating random ids
resource "random_id" "instance_id" {
 byte_length = 8
}

// A single Compute Engine instance
resource "google_compute_instance" "default" {
  name         = var.instance_name
  machine_type = var.machine_type
  zone         = var.zone
  tags         = [var.instance_name, var.env_name]
  boot_disk {
    initialize_params {
    size =  var.boot_disk_size
    image = data.google_compute_image.sqlserverimage.self_link
    }

    }

  network_interface {
  subnetwork = var.subnetwork
  subnetwork_project = var.subnetwork_project
 }
}

data "google_compute_image" "sqlserverimage" {
  family  = var.image_family
  project = var.project
}

// Create additional disks
resource "google_compute_disk" "datadisk" {
  name  = var.data_disk_name
  type  = var.data_disk_type
  size  = var.data_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

resource "google_compute_disk" "backupdisk" {
  name  = var.backup_disk_name
  type  = var.backup_disk_type
  size  = var.backup_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

resource "google_compute_disk" "logdisk" {
  name  = var.log_disk_name
  type  = var.log_disk_type
  size  = var.log_disk_size
  zone  = var.zone
  image = data.google_compute_image.sqlserverimage.self_link
  labels = {
    environment = "dev"
    asv = "mycompanytools"
    ownercontact = "myuser"
  }
  physical_block_size_bytes = 4096
}

// Attach additional disks
resource "google_compute_attached_disk" "datadiskattach" {
  disk = google_compute_disk.datadisk.id
  instance = google_compute_instance.default.id
}

resource "google_compute_attached_disk" "backupdiskattach" {
  disk = google_compute_disk.backupdisk.id
  instance = google_compute_instance.default.id
}

resource "google_compute_attached_disk" "logdiskattach" {
  disk = google_compute_disk.logdisk.id
  instance = google_compute_instance.default.id
}
但是当我运行一个
地形平面图时
会出现以下错误:

terraform plan

Error: Reference to undeclared resource

  on outputs.tf line 2, in output "ip":
   2:   value = google_compute_address.vm_private_ip.address

A managed resource "google_compute_address" "vm_private_ip" has not been
declared in the root module.

在创建实例之前,不会知道私有IP。如何获得显示专用IP的输出?我不想为实例分配IP,我只想知道它创建后拥有什么IP。

要获取通过
Google\u Compute\u实例创建的Google Compute实例的默认、动态分配的IP地址,您可以访问
network\u接口。0.network\u IP
属性,如中所述:

  • network\u interface.0.network\u ip
    -实例的内部ip地址,手动或动态分配
因此,您的输出应该是:

output "ip" {
  value = google_compute_instance.default.network_interface.0.network_ip
}

下面的输出块将为您提供所需的输出值

output "ip" {
  value = google_compute_instance.default.network_interface.0.network_ip
}

你能编辑你问题中的代码,使之形成一个“请”字吗?现在看起来你还没有把你的
google\u compute\u address
资源命名为
vm\u private\u ip
,但是你不可能从当前代码中准确地知道你哪里出错了。好的,当然,我现在就添加它。好的,我刚刚用我的原始代码更新了OP。谢谢您的代码不包含解释错误的
google\u compute\u address
资源。是否要添加一个,但尚未添加?或者你只想知道
google\u compute\u实例
资源的IP地址吗?我只想知道实例创建后的IP地址。我不想给它一个。我尝试将它添加到我的输出中:
output“ip”{value=network\u interface.0.network\u ip}
但是我得到了这个错误:
terraform plan错误:outputs.tf行2上的无效引用,在输出“ip”中:2:value=network\u interface.0.network\u ip对资源类型的引用必须后跟至少一个属性访问,并指定资源名称。
我做错了什么?@bluethundr您完全没有提供资源及其标识符名称