Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 错误-缺少资源实例键:因为google“U compute”实例有;计数“;设置时,必须在特定实例上访问其属性_Google Cloud Platform_Terraform_Google Compute Engine_Terraform Provider Gcp - Fatal编程技术网

Google cloud platform 错误-缺少资源实例键:因为google“U compute”实例有;计数“;设置时,必须在特定实例上访问其属性

Google cloud platform 错误-缺少资源实例键:因为google“U compute”实例有;计数“;设置时,必须在特定实例上访问其属性,google-cloud-platform,terraform,google-compute-engine,terraform-provider-gcp,Google Cloud Platform,Terraform,Google Compute Engine,Terraform Provider Gcp,我试图将模块“microservice instance”中创建的google计算实例的mat_ip传递给另一个模块“database”。由于我创建了多个实例,所以模块“microservice instance”中的输出变量出现以下错误 我已经研究了以下内容,并使用相同的方法访问属性,但它不起作用。这是代码- main.tf ./modules/microservice instance/microservice-instance.tf resource "google_comput

我试图将模块“microservice instance”中创建的google计算实例的mat_ip传递给另一个模块“database”。由于我创建了多个实例,所以模块“microservice instance”中的输出变量出现以下错误

我已经研究了以下内容,并使用相同的方法访问属性,但它不起作用。这是代码- main.tf

./modules/microservice instance/microservice-instance.tf

resource "google_compute_instance" "apps" {
  count        = var.appserver_count
  name         = "apps-${count.index + 1}"
  # name         = "apps-${random_id.app_name_suffix.hex}"
  machine_type = "f1-micro"

  boot_disk {
    initialize_params {
      image = "ubuntu-os-cloud/ubuntu-1804-lts"
    }
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral IP
    }
  }
}
./modules/microservice实例/ms-outputs.tf

output "nat_ip" {
  value = google_compute_instance.apps.network_interface[*].access_config[0].nat_ip
}
./modules/database/database.tf

resource "random_id" "db_name_suffix" {
  byte_length = 4
}

resource "google_sql_database_instance" "postgres" {
  name             = "postgres-instance-${random_id.db_name_suffix.hex}"
  database_version = "POSTGRES_11"
  settings {
    tier = "db-f1-micro"

    ip_configuration {

      dynamic "authorized_networks" {
        for_each = var.nat_ip
        # iterator = ip

        content {
          # value = ni.0.access_config.0.nat_ip
          value = each.key
        }
      }

    }
  }
}

您正在创建
var.appserver\u count
google\u compute\u实例的数量。因此,您将有:

google_compute_instance.apps[0]
google_compute_instance.apps[1]
...
google_compute_instance.apps[var.appserver_count - 1]
因此,在
输出中
,而不是:

output "nat_ip" {
  value = google_compute_instance.apps.network_interface[*].access_config[0].nat_ip
}
您必须使用
[*]
引用单个
应用程序
资源或所有资源,例如:

output "nat_ip" {
  value = google_compute_instance.apps[*].network_interface[*].access_config[0].nat_ip
}

我也试过了,但得到了如下不同的错误。。。错误:模块“数据库”中main.tf行17上不支持的属性:17:nat_ip=module.microservice-instance.nat_ip此值没有任何属性。@Amit我不确定您想要实现什么。您的
输出“nat\u ip”
将始终返回多个
nat\u ip
s。但是您的
模块“database”
似乎只需要一个
nat\u ip
?我需要将这些多个nat\u ip列表返回到database模块,并循环(请参见database.tf中的每个nat\u)以设置db实例的授权网络。
output "nat_ip" {
  value = google_compute_instance.apps.network_interface[*].access_config[0].nat_ip
}
output "nat_ip" {
  value = google_compute_instance.apps[*].network_interface[*].access_config[0].nat_ip
}