标签: terraform-provider-gcp

gcloud cli 无法创建项目 - 您指定的项目 ID 已被另一个项目使用

我正在尝试设置 Terraform 以与 GCP 一起使用,但在从 gcloud cli 创建新项目时遇到问题:Terraform Lab

我正在使用的命令是

gcloud projects create testproject
Run Code Online (Sandbox Code Playgroud)

我一遍又一遍的错误是:

ERROR: (gcloud.projects.create) Project creation failed. The project ID you specified is already in use by another project. Please try an alternative ID.
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的:

  1. 我在 Cloud Identity 中创建了一个“组织”和一个用户
  2. 使用我创建的用户在浏览器中登录 GCP 控制台
  3. 用户具有“组织管理员”角色
  4. 使用家庭计算机上配置的 Cloud Shell 或 gcloud,我无法创建新项目。在这两种情况下(云外壳和本地 gcloud 安装),我都能够成功执行“gcloud 项目列表”和“gcloud 组织列表”等操作
  5. 我已经尝试使用符合格式要求的不同项目 ID 名称(例如 6-30 个字符、小写字母等)。我还可以确认项目 ID 不存在。
  6. 但是,我能够通过 GCP 网络控制台(https://console.cloud.google.com)成功创建项目(使用在 gcloud cli 中配置的相同 IAM 帐户)
  7. 我曾多次尝试“gcloud init”,以确保我使用的是正确的 IAM 帐户,以防万一。

这是我尝试从“gcloud init”命令创建新项目时遇到的错误:

Enter …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform gcloud terraform terraform-provider-gcp

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

如何使用 Terraform 将 GKE 凭证传递给 kubernetes 提供商?

我已经用 Terraform 创建了一个 GKE 集群,我也想用 Terraform 管理 Kubernetes。但是,我不知道如何将 GKE 的凭据传递给kubernetes提供者。

我按照数据源文档中示例进行操作google_client_config,我得到了

data.google_container_cluster.cluster.endpoint为空

这是我失败的尝试https://github.com/varshard/gke-cluster-terraform/tree/title-terraform

cluster.tf 负责创建一个 GKE 集群,工作正常。

kubernetes.tf 负责管理Kubernetes,未能获得GKE凭证。

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

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

Bigquery 使用 Terraform 从 Sheet 文件创建表

我正在尝试使用 Terraform从 Google Sheets 摄取数据创建 BQ 表,这里是我的external_data_configuration

resource "google_bigquery_table" "sheet" {
  dataset_id = google_bigquery_dataset.bq-dataset.dataset_id
  table_id   = "sheet"

  external_data_configuration {
    autodetect    = true
    source_format = "GOOGLE_SHEETS"

    google_sheets_options {
      skip_leading_rows = 1
    }

    source_uris = [
      "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxx",
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我将文件设为公开,但是当我尝试创建表时出现错误:

错误:googleapi:错误 400:读取表格时出错:工作表,错误消息:无法读取电子表格。错误:未找到具有 Google Drive 范围的 OAuth 令牌。,无效

我阅读了 Terraform文档,似乎我需要在我的provider.tf文件中指定access_tokenscopes我只是不知道该怎么做,因为我认为它会与我当前的身份验证方法(服务帐户)冲突

解决方案

将 scopes 参数添加到您的provider.tf

provider "google" {
    credentials = "${file("${var.path}/secret.json")}"
    scopes = ["https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/bigquery"]
    project     = "${var.project_id}"
    region      = "${var.gcp_region}"
} …
Run Code Online (Sandbox Code Playgroud)

google-drive-api google-bigquery terraform-provider-gcp

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

在 required_providers 中设置了提供程序版本,但 terraform 仍然抱怨

我正在尝试在 required_providers 中以新的方式设置我的提供程序的版本,如下所示

\n
terraform {\n  required_providers {\n    cloudflare = {\n      source = "cloudflare/cloudflare"\n      version = "~> 2.11.0"\n    }\n    google = {\n      source = "hashicorp/google"\n      version = "~> 3.39.0"\n    }\n    kubernetes = {\n      source = "hashicorp/kubernetes"\n      version = "~> 1.13.2"\n    }\n    vault = {\n      source = "hashicorp/vault"\n      version = "~> 2.14.0"\n    }\n  }\n  required_version = "~> 0.13.2"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

与此处此处的文档一致

\n

但是,当我运行时,terraform init我仍然得到以下输出。

\n
The following providers do not have any version constraints in configuration,\nso the …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-gcp

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

如何修复 terraform 远程状态和本地状态不匹配的问题

我的队友正在使用 terraform v0.12.28,我开始与他一起工作,但我使用的是 v0.13.x 并做了一些更改,我们使用存储在 GCS 存储桶中的状态文件。

现在我的队友让我降级,因为他写了一些与v0.12.28兼容的模块,我确实降级了我的版本,但远程状态仍然是v0.13.x。

现在我们陷入了具有更高版本的远程状态。解决这个问题最安全的方法是什么?我们处于初始阶段,因此我们可以破坏整个基础设施,但仍然想知道解决方法。

terraform terraform-provider-gcp

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

将 terraform 输出分配给环境变量

如何将 terraform 输出分配给环境变量?

假设我在main.tf中定义了以下输出

output "gce_public_ip" {
    value = element(concat(google_compute_instance.vm_instance.*.network_interface.0.access_config.0.nat_ip, list("")), 0)
}
Run Code Online (Sandbox Code Playgroud)

我想导出gce_public_ip,因此它将作为环境变量提供GCE_PUBLIC_IP

terraform terraform-provider-gcp

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

如何使用 Terraform 为 Kubernetes 入口分配静态 IP 地址?

我一直在使用 kubernetes 入口配置文件来分配 GCP 创建的静态外部 IP 地址。入口和部署由 GKE 管理。

入口.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: test-address
spec:
  backend:
    serviceName: test-service
    servicePort: 80
Run Code Online (Sandbox Code Playgroud)

使用此 yaml 文件,已创建的静态 IP 地址已成功附加到入口。

在 VPC 网络上的外部 IP 地址菜单上,该 IP 已被转发规则使用。

Name External Address Region Type Version In use by

test-address 12.34.56.78 asia-northeast2 Static IPv4 Forwarding rule k8s2-ab-blablablabla

然而,最近我尝试测试 Terraform 将基础设施部署到 GCP,并制作了一个与上述 ingress.yaml 完全相同的 Terraform 配置文件。

入口.tf

resource "kubernetes_ingress" "test_ingress" {
  metadata {
    name = "test-ingress"
    annotations = {
      "kubernetes.io/ingress.global-static-ip-name" = "test-address"
    } …
Run Code Online (Sandbox Code Playgroud)

kubernetes terraform kubernetes-ingress terraform-provider-gcp

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

terraform/gcp - 如何使用 TF 启用 iam.googleapis.com

请帮助了解如何使用 Terraform 启用 GCP IAM API。

\n

环境

\n
$ terraform --version\nTerraform v1.0.4\non linux_amd64\n+ provider registry.terraform.io/hashicorp/google v4.6.0\n+ provider registry.terraform.io/hashicorp/time v0.7.2\n
Run Code Online (Sandbox Code Playgroud)\n

资源

\n
resource "google_project_service" "iam" {\n  project = data.google_project.project.project_id\n  service = "iam.googleapis.com"\n  timeouts {\n    create = "20m"\n    update = "20m"\n  }\n  disable_dependent_services = false\n  disable_on_destroy         = false\n}\n
Run Code Online (Sandbox Code Playgroud)\n

错误

\n

运行terraform apply但它不断重复错误消息。

\n
Error: Error creating service account: googleapi: Error 403: Identity and Access Management (IAM) API has not been used in project 450605631931 before or it …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-gcp

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

(Terraform、GCP)错误 403:列出消费者容器服务的权限被拒绝 [projects/335478934851]

GCP上,我尝试使用下面的Terraform代码启用“身份和访问管理(IAM)API”

provider "google" {
  credentials = file("myCredentials.json")
  project     = "myproject-173831"
  region      = "asia-northeast1"
}

resource "google_project_service" "project" {
  service = "iam.googleapis.com"
}
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

读取或编辑 Project Service 时出错:请求List Project Services myproject-173831返回错误:无法列出项目 myproject-173831 启用的服务:googleapi:错误 403:列出使用者容器服务的权限被拒绝 [projects/335478934851]

然后我就无法启用它

在此输入图像描述

所以现在,我尝试添加一个角色来解决上面的这个错误,但是有太多角色可供选择:

在此输入图像描述

我需要选择什么角色?

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

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

google_project_iam_binding 和 google_project_iam_member 之间的区别

嗨,地球伙伴们

我想自动化 Google Cloud Platform 上服务帐号和用户的角色分配流程。我实际上正在考虑创建 IAM 自定义角色,以获得不同服务的细粒度角色 terraform 资源,并将该角色分配给我想要的用户或服务帐户。

检查关联哪些成员将获得哪些角色的方式,我实际上想知道使用 google_project_iam_binding和使用google_project_iam_member资源之间有什么区别。

我目前的理解可能在于使用google_project_iam_binding向服务帐户和用户帐户授予角色google_project_iam_member,但我不确定,因为在文档中它们使用两者来关联用户帐户。

我还发现这篇有趣的文章https://binx.io/nl/2021/12/16/how-to-name-your-google-project-iam-resources-in-terraform/

如您所知,Terraform 中的 Google IAM 资源分为三种类型:

我不知道前一句话,我想深入了解如何使用策略和 IAM 角色,以更好地实现我的目的。

google-iam terraform-provider-gcp

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