提供Terraform在Terraform文件中而不是ENV变量中提供凭据



我已经在GCP上设置了一个带有远程后端的Terraform项目。现在,当我想部署基础架构时,我会遇到具有凭据的问题。我在

中有一个凭据文件
homemike.configgcloudcredentials.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文件中的凭据,在该脚本无法设置环境变量。我如何让Terraform知道凭据在不设置ENV变量的情况下在哪里?

我在尝试运行Terraform(版本1.1.5)命令时仍面临相同的错误,尽管通过gcloud auth login成功进行了认证。

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

错误:Storage.NewClient()失败:拨号:Google:找不到默认凭据。有关更多信息

事实证明,我还必须通过gcloud auth application-default login进行身份验证,并在此后运行Terraform命令。

我最终弄清楚了这一点。

数据还需要具有凭据。

,例如

data "terraform_remote_state" "project_id" {
  backend   = "gcs"
  workspace = "${terraform.workspace}"
  config = {
    bucket = "${var.bucket_name}"
    prefix = "${var.prefix_project}"
    credentials = "${var.credentials}"  <- added
  }
}

提供服务帐户凭据:

terraform {
  backend "gcs" {
    credentials = "myserviceaccount-credentials-file.json"
    bucket = "my-project-global-bucket"
    prefix = "terraform/state"
  }
}

最新更新