在Terraform文件而不是env变量中为Terraform提供凭证

时间:2019-03-08 17:42:57

标签: terraform terraform-provider-gcp

我已经在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

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

1 个答案:

答案 0 :(得分:1)

我终于弄明白了。

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

例如

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

  config {
    bucket = "${var.bucket_name}"
    prefix = "${var.prefix_project}"
    credentials = "${var.credentials}"  <- added
  }
}