标签: terraform-provider-gcp

为什么我会收到此 GRPCProvider UpgradeResourceState terraform 错误?

问题:为了解决表的 GCP 数据目录标记的一些其他问题,将 terraform 从 0.14.4 更新到 1.0.8 后,我在尝试应用 terraform 时遇到了新错误。

\n
\xe2\x94\x82 Error: Request cancelled\n\xe2\x94\x82 \n\xe2\x94\x82   with module.ds-bigquery.google_bigquery_table.prism_tables_no_partition["co.expenses"],\n\xe2\x94\x82   on ds-bigquery/bq-prism-tables.tf line 249, in resource "google_bigquery_table" "prism_tables_no_partition":\n\xe2\x94\x82  249: resource "google_bigquery_table" "prism_tables_no_partition" {\n\xe2\x94\x82 \n\xe2\x94\x82 The plugin.(*GRPCProvider).UpgradeResourceState request was cancelled.\n
Run Code Online (Sandbox Code Playgroud)\n

和这个痕迹

\n
Stack trace from the terraform-provider-google_v3.61.0_x5 plugin:\n\npanic: interface conversion: interface {} is string, not map[string]interface {}\n\ngoroutine 4466 [running]:\ngithub.com/hashicorp/terraform-provider-google/google.bigQueryTablecheckNameExists(0xc000df9600, 0x1, 0x1, 0x0, 0x2d21b78)\n    /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:26 +0x164\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x2526520, 0xc000543940, 0x2526520, 0xc000543ae0, 0x2d22688, 0x40c201, 0xc000df9f30, 0x10)\n    /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:47 +0x63f\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x275dac0, 0xc000c5ec00, 0x275dac0, 0xc000c5f140, 0x2d22688, 0x1, 0xc000f90120, 0xc000fd1000)\n …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-gcp

2
推荐指数
1
解决办法
6465
查看次数

如何继承访问权限以查看属于 GCP 组织的所有项目?

我目前被列为 Google Workspace 管理员,但由于某种原因,我似乎仍然无法执行某些操作,例如创建文件夹来组织项目。我们使用 terraform 生成一些项目,生成的项目仅授予对权限中直接指定的项目的访问权限。

我看到网站上引用的继承权限/访问权限。我们如何设置它,以便我和其他一些人始终继承访问权限以查看为组织创建的每个项目?

google-cloud-platform terraform google-iam google-cloud-iam terraform-provider-gcp

2
推荐指数
1
解决办法
1704
查看次数

无法找出为 VPC 对等互连和 GCP 网络服务创建地址的 Terraform 配置等效项

我想从 GKE 集群 Pod 访问我的 CloudSQL 实例。由于我正在设置,所以我需要携带与 Terraform 配置文件相关的所有 GCP。

按照本教程进行操作:https://cloud.google.com/sql/docs/mysql/quickstart-kubernetes-engine#gcloud_2

我被困在描述创建对等 vpc 连接的两个步骤中。

所以我的问题是以下两个命令的 Terraform 等效项是什么:

gcloud compute addresses create google-managed-services-default \
--global \
--purpose=VPC_PEERING \
--prefix-length=16 \
--description="peering range for Google" \
--network=default
Run Code Online (Sandbox Code Playgroud)

gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default
Run Code Online (Sandbox Code Playgroud)

我试图在https://registry.terraform.io/providers/hashicorp/google/latest/docs中找到它,但找不到合适的。

google-cloud-platform terraform terraform-provider-gcp

2
推荐指数
1
解决办法
728
查看次数

(Terraform) 左操作数的值不合适:需要一个数字

GCP上,我尝试使用下面的 Terraform 代码运行Cloud Run服务“renderer”,在此代码中,我使用plus(连接“gcr.io/”、变量var.project_id“/renderer:latest” +) :

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/" + var.project_id + "/renderer:latest" // Here
      }
      service_account_name = google_service_account.renderer_identity.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,当我应用上面的代码时,出现以下错误:

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/" + var.project_id + …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform devops terraform-provider-gcp google-cloud-run

2
推荐指数
1
解决办法
6893
查看次数

使用 terraform 为云存储桶指定标签的语法是什么?

我可以使用 Terraform 资源google_storage_bucket创建 Google Cloud Storage Bucket 。

\n

但我无法找到带有labels参数的示例,也无法找到有效的语法。

\n

以下通过terraform plan

\n
resource "google_storage_bucket" "report_staging" {\n  name                        = "some-unique-name"\n \n  labels = {\n    key = "env" \n    value = "dev"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但给出了 400 错误terraform apply

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: googleapi: Error 400: Invalid argument., invalid\n\xe2\x94\x82\n\xe2\x94\x82   with module.ndpe_project.google_storage_bucket.report_staging,\n\xe2\x94\x82   on ....main.tf line 130, in resource "google_storage_bucket" "report_staging":\n\xe2\x94\x82  130: resource "google_storage_bucket" "report_staging" {\n\n
Run Code Online (Sandbox Code Playgroud)\n

我相信上面的语法实际上会创建两个名为“key”和“value”的键。这也将通过计划阶段:

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: googleapi: Error 400: Invalid argument., invalid\n\xe2\x94\x82\n\xe2\x94\x82   with …
Run Code Online (Sandbox Code Playgroud)

google-cloud-storage terraform-provider-gcp

2
推荐指数
1
解决办法
2357
查看次数

每个项目的 Terraform 都有不同的后端

我是 Terraform 的新手,仍在研究文档,尚未找到一种方法来适应我需要实现的特定解决方案的设置,并希望某种灵魂能够能够推动我朝正确的方向前进。

我正在尝试管理一组参数化模板,这些模板部署支持我们在 GCP 中开发的新应用程序所需的一切。我想要实现的目标是能够将这些模板部署到三个不同的环境,每个环境本身都位于不同的 GCP 项目中。

根据建议,该计划是运行 terraform 并传入

a) 特定的 .tfvars 文件取决于部署到的环境/项目 (dev/test/prod)。

b) 使用 -chdir 参数告诉 Terraform 从“infra-common”文件夹中获取所有模板。

棘手的部分是我们希望每个环境(gcp 项目)在 gcs/storage 中托管它自己的状态文件。

我一直在研究工作区,但工作区似乎只会在单个后端上创建状态子文件夹。

问题:可以这样做或者有更好的方法吗?

谢谢!

terraform terraform-provider-gcp

2
推荐指数
1
解决办法
6682
查看次数

如果没有提供其值,如何忽略Terraform中的参数?

我正在使用"google_sql_database_instance"资源来创建仅具有私有IP的云实例,并从变量文件或命令行参数中获取_private_network_的值,或者根本不提供任何值.

所有我想要实现的是,创建只有私有IP实例private_network提供,包括_private_network_参数如果提供了它的价值.这里的问题是这个变量不接受空字符串(""),因为它验证了下面的正则表达式.
"projects/((?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)))/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$".

我如何创建一个可配置的模块(仅在提供private_network时创建私有IP实例,否则完全忽略该参数)并且不强制要求_private_network_变量的值?

google-cloud-sql terraform terraform-provider-gcp

1
推荐指数
1
解决办法
1127
查看次数

使用Terraform管理GKE及其部署

我可以用来terraform在中部署Kubernetes群集GKE

然后,我将提供程序设置Kubernetes如下:

provider "kubernetes" {
  host                    = "${data.google_container_cluster.primary.endpoint}"

  client_certificate      = "${base64decode(data.google_container_cluster.primary.master_auth.0.client_certificate)}"
  client_key              = "${base64decode(data.google_container_cluster.primary.master_auth.0.client_key)}"
  cluster_ca_certificate  = "${base64decode(data.google_container_cluster.primary.master_auth.0.cluster_ca_certificate)}"
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,terraformKubernetes用户互动client,后者无权创建(例如)部署。因此,当我尝试通过以下方式应用更改时,出现此错误terraform

Error: Error applying plan:

1 error(s) occurred:

 * kubernetes_deployment.foo: 1 error(s) occurred:

 * kubernetes_deployment.foo: Failed to create deployment: deployments.apps is forbidden: User "client" cannot create deployments.apps in the namespace "default"
Run Code Online (Sandbox Code Playgroud)

我不知道现在该如何进行,应该如何向client用户授予此权限?

如果将以下字段添加到提供程序,则我可以执行部署,尽管在阅读文档之后,这些凭据似乎用于HTTP与群集进行通信,如果通过Internet完成,则是不安全的。

username              = "${data.google_container_cluster.primary.master_auth.0.username}"
password              = "${data.google_container_cluster.primary.master_auth.0.password}"
Run Code Online (Sandbox Code Playgroud)

还有其他更好的方法吗?

kubernetes google-kubernetes-engine terraform-provider-gcp terraform-provider-kubernetes

1
推荐指数
1
解决办法
573
查看次数

想要通过 Terraform 部署 Google Cloud Run 服务

我想使用 terraform 部署一个谷歌云运行服务。当我尝试通过“端口”块进行部署以定义容器端口时,出现错误,我必须从模板标记传递容器端口,但无法这样做。这是我的 .tf 文件 -

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "us.gcr.io/xxxxxx/xxxx.app"

        port {
          container_port = 19006
        }
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

data "google_iam_policy" "noauth" {
  binding {
    role = "roles/run.invoker"
    members = [
      "allUsers",
    ]
  }
}

resource "google_cloud_run_service_iam_policy" "noauth" {
  location    = google_cloud_run_service.default.location
  project     = google_cloud_run_service.default.project
  service     = google_cloud_run_service.default.name

  policy_data = data.google_iam_policy.noauth.policy_data
}

output "url" { …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform terraform-provider-gcp google-cloud-run

1
推荐指数
1
解决办法
1240
查看次数

允许通过 SSH 访问使用 Terraform 配置的 GCP 虚拟机实例

我正在尝试使用 Terraform 在 GCP 上创建 VM 实例。确实创建了实例,但我似乎无法通过 SSH 访问这些实例。我的tf文件:

# Cloud Provider
provider "google" {
  version = "3.5.0"
  credentials = file("./terraform-service-account.json")
  project = "terraform-279210"
  region  = "us-central1"
  zone    = "us-central1-c"
}
# Virtual Private Network
resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}
# VM Instance
resource "google_compute_instance" "demo-vm-instance" {
  name         = "demo-vm-instance"
  machine_type = "f1-micro"
  tags         = ["demo-vm-instance"]
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  metadata = {
    ssh-keys = "demouser:${file("./demouser.pub")}"
  }
  network_interface {
    network …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform terraform terraform-provider-gcp

1
推荐指数
1
解决办法
1356
查看次数