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