在 terraform 文件而不是 env 变量中为 Terraform 提供凭据
Providing Terraform with credentials in terraform files instead of env variable
我已经在 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)}"
}
然而,这 运行s 变成了
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 知道凭据在哪里?
我终于想通了。
数据也需要有凭据。
例如
data "terraform_remote_state" "project_id" {
backend = "gcs"
workspace = "${terraform.workspace}"
config = {
bucket = "${var.bucket_name}"
prefix = "${var.prefix_project}"
credentials = "${var.credentials}" <- added
}
}
尽管已通过 gcloud auth login
.
成功验证,但我在尝试 运行 terraform(版本 1.1.5)命令时遇到了同样的错误
我的错误信息:
Error: storage.NewClient() failed: dialing: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
事实证明,我还必须通过 gcloud auth application-default login
进行身份验证,然后才能 运行 terraform 命令。
我已经在 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)}"
}
然而,这 运行s 变成了
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 知道凭据在哪里?
我终于想通了。
数据也需要有凭据。
例如
data "terraform_remote_state" "project_id" {
backend = "gcs"
workspace = "${terraform.workspace}"
config = {
bucket = "${var.bucket_name}"
prefix = "${var.prefix_project}"
credentials = "${var.credentials}" <- added
}
}
尽管已通过 gcloud auth login
.
我的错误信息:
Error: storage.NewClient() failed: dialing: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
事实证明,我还必须通过 gcloud auth application-default login
进行身份验证,然后才能 运行 terraform 命令。