Google cloud platform 如何获取Terraform Google Cloud ressource Google_compute_实例_模板的IP和名称

Google cloud platform 如何获取Terraform Google Cloud ressource Google_compute_实例_模板的IP和名称,google-cloud-platform,terraform,Google Cloud Platform,Terraform,我正在使用Terraform中的google\u compute\u instance\u模板ressource,我想知道如何访问Terraform中模板将创建的VM的公共IP地址和名称 我的模板如下所示: resource "google_compute_instance_template" "tpl" { name_prefix = "${var.name_prefix}-" project

我正在使用Terraform中的
google\u compute\u instance\u模板
ressource,我想知道如何访问Terraform中模板将创建的VM的公共IP地址和名称

我的模板如下所示:

resource "google_compute_instance_template" "tpl" {
  name_prefix             = "${var.name_prefix}-"
  project                 = var.project_id
  machine_type            = var.machine_type
  labels                  = var.labels
  metadata                = var.metadata
  tags                    = var.tags
  can_ip_forward          = var.can_ip_forward
  metadata_startup_script = var.startup_script
  region                  = var.region
  dynamic "disk" {
    for_each = local.all_disks
    content {
      auto_delete  = lookup(disk.value, "auto_delete", null)
      boot         = lookup(disk.value, "boot", null)
      device_name  = lookup(disk.value, "device_name", null)
      disk_name    = lookup(disk.value, "disk_name", null)
      disk_size_gb = lookup(disk.value, "disk_size_gb", null)
      disk_type    = lookup(disk.value, "disk_type", null)
      interface    = lookup(disk.value, "interface", null)
      mode         = lookup(disk.value, "mode", null)
      source       = lookup(disk.value, "source", null)
      source_image = lookup(disk.value, "source_image", null)
      type         = lookup(disk.value, "type", null)

      dynamic "disk_encryption_key" {
        for_each = lookup(disk.value, "disk_encryption_key", [])
        content {
          kms_key_self_link = lookup(disk_encryption_key.value, "kms_key_self_link", null)
        }
      }
    }
  }

  dynamic "service_account" {
    for_each = [var.service_account]
    content {
      email  = lookup(service_account.value, "email", null)
      scopes = lookup(service_account.value, "scopes", null)
    }
  }

  network_interface {
    network            = var.network
    subnetwork         = var.subnetwork
    subnetwork_project = var.subnetwork_project
    dynamic "access_config" {
      for_each = var.access_config
      content {
        nat_ip       = access_config.value.nat_ip
        network_tier = access_config.value.network_tier
      }
    }
  }

  lifecycle {
    create_before_destroy = "true"
  }

  # scheduling must have automatic_restart be false when preemptible is true.
  scheduling {
    preemptible       = var.preemptible
    automatic_restart = ! var.preemptible
  }

  dynamic "shielded_instance_config" {
    for_each = local.shielded_vm_configs
    content {
      enable_secure_boot          = lookup(var.shielded_instance_config, "enable_secure_boot", shielded_instance_config.value)
      enable_vtpm                 = lookup(var.shielded_instance_config, "enable_vtpm", shielded_instance_config.value)
      enable_integrity_monitoring = lookup(var.shielded_instance_config, "enable_integrity_monitoring", shielded_instance_config.value)
    }
  }
}
我的计划中没有
google\u compute\u实例
ressource,只有
google\u compute\u实例模板

所以我的问题是,如何访问Terraform中VM的公共IP地址和名称

我试过
google\u compute\u instance\u template.tpl.network\u interface.0.access\u config.0.nat\u ip
,但它是空的

致以最良好的祝愿, rforberger基于评论

这是唯一的模板,您可以基于该模板使用或创建实例

因此,创建这些实例后,您将能够使用实例或MIG资源访问它们的IP地址。但模板本身并没有提供这样的信息。创建MIG后,可以使用MIG数据源中的属性来获取实例。但是实例的数量和id会随着时间而变化,因为它们完全由MIG管理,而不是由terraform管理。

根据评论

这是唯一的模板,您可以基于该模板使用或创建实例


因此,创建这些实例后,您将能够使用实例或MIG资源访问它们的IP地址。但模板本身并没有提供这样的信息。创建MIG后,可以使用MIG数据源中的属性来获取实例。但实例的数量和id会随时间而变化,因为它们完全由MIG而不是terraform管理。

使用
local exec
执行CLI

resource "null_resource" "instances" {
  provisioner "local-exec" {
    command = "gcloud compute instance-groups managed list-instances <NAME>"
  }
}
resource“null\u资源”实例{
供应人“本地执行官”{
command=“gcloud计算实例组托管列表实例”
}
}

替换为表示MIG的
var
或字符串。

使用
local exec
执行CLI

resource "null_resource" "instances" {
  provisioner "local-exec" {
    command = "gcloud compute instance-groups managed list-instances <NAME>"
  }
}
resource“null\u资源”实例{
供应人“本地执行官”{
command=“gcloud计算实例组托管列表实例”
}
}

替换为表示MIG的
var
或字符串。

您无法访问它们,因为实例还不存在。@Marcin真的吗?没有办法访问实例的IP和名称吗?您在编写时还没有创建任何实例。您只有一个模板。该实例是使用该模板通过MIG创建的module“managed_instance_group”{source=“../../../../terraform google vm/modules/mig”region=var.region target_size=5 hostname=“k8s”instance_template=module.instance_template.self_link target_pool=[module.load_balancer\u custom_hc.target__\u pool]命名的_端口=[{name=“https”port=6443}]}```但我如何访问实例的IP和名称?或者换句话说:我如何访问由Google托管的实例组()创建的实例的IP地址和名称?您无法访问它们,因为实例还不存在。@Marcin真的吗?没有办法访问实例的IP和名称吗?您在编写时还没有创建任何实例。您只有一个模板。该实例是使用该模板通过MIG创建的module“managed_instance_group”{source=“../../../../terraform google vm/modules/mig”region=var.region target_size=5 hostname=“k8s”instance_template=module.instance_template.self_link target_pool=[module.load_balancer\u custom_hc.target__\u pool]命名的_端口=[{name=“https”port=6443}]}``但是我如何访问实例的IP和名称?或者换句话说,我如何访问由Google托管的实例组()创建的实例的IP地址和名称?这虽然不是真正的Terraform。@RonnyForberger-Terraform不管理托管实例组创建的计算引擎实例。“变通”是我能想到的唯一技术。如果您的要求是本机Terraform提供程序功能,则不可能。这虽然不是真正的Terraform。@RonnyForberger-Terraform不管理托管实例组创建的计算引擎实例。“变通”是我能想到的唯一技术。如果您的要求是本机Terraform provider功能,则不可能。如何从MIG数据源访问instances属性?我只有google_compute_region_instance_group_manager资源,它有object instance_group,但这只是google_compute_instance_group_manager的URL。访问时出现以下错误:此值没有任何属性。如何从MIG数据源访问instances属性?我只有google_compute_region_instance_group_manager资源,它有object instance_group,但这只是google_compute_instance_group_manager的URL。访问该值时出现以下错误:该值没有任何属性。