4

我已经在 GCP 上建立了一个带有远程后端的 terraform 项目。现在,当我想部署基础架构时,我遇到了凭据问题。我有一个凭据文件

\home\mike\.config\gcloud\credentials.json

在我的 terraform 项目中,我有以下涉及远程状态的数据:

data "terraform_remote_state" "project_id" {
   backend   = "gcs"
   workspace = "${terraform.workspace}"

   config {
     bucket = "${var.bucket_name}"
     prefix = "${var.prefix_project}"
   }
}

我用我的凭据文件的详细信息指定云提供商。

provider "google" {
  version     = "~> 1.16"
  project     = "${data.terraform_remote_state.project_id.project_id}"
  region      = "${var.region}"
  credentials = "${file(var.credentials)}"
}

但是,这会遇到

data.terraform_remote_state.project_id: data.terraform_remote_state.project_id: 
error initializing backend:
storage.NewClient() failed: dialing: google: could not find default 
credentials. 

如果我添加

export GOOGLE_APPLICATION_CREDENTIALS=/home/mike/.config/gcloud/credentials.json

我确实让它按需要运行。我的问题是我想在 terraform 文件中指定凭据,因为我从无法设置环境变量的 python 脚本以自动方式运行 terraform 命令。在不设置 env 变量的情况下,如何让 terraform 知道凭据在哪里?

4

2 回答 2

4

我最终想通了。

此外,数据需要具有凭据。

例如

data "terraform_remote_state" "project_id" {
  backend   = "gcs"
  workspace = "${terraform.workspace}"

  config = {
    bucket = "${var.bucket_name}"
    prefix = "${var.prefix_project}"
    credentials = "${var.credentials}"  <- added
  }
}
于 2019-03-08T19:48:36.630 回答
0

尽管已通过gcloud auth login.

在我的情况下的错误消息:

错误:storage.NewClient() 失败:拨号:google:找不到默认凭据。有关详细信息,请参阅https://developers.google.com/accounts/docs/application-default-credentials

事实证明,我还必须通过身份验证,gcloud auth application-default login然后才能运行 terraform 命令。

于 2022-03-03T11:44:05.347 回答