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

Posted

技术标签:

【中文标题】在 terraform 文件而不是 env 变量中为 Terraform 提供凭据【英文标题】:Providing Terraform with credentials in terraform files instead of env variable 【发布时间】:2019-07-30 18:57:39 【问题描述】:

我在 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 知道凭据在哪里?

【问题讨论】:

【参考方案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
  

【讨论】:

缺少配置 =

以上是关于在 terraform 文件而不是 env 变量中为 Terraform 提供凭据的主要内容,如果未能解决你的问题,请参考以下文章

Terraform GCP 启动脚本本地文件而不是内联文件

检查变量是不是存在 - Terraform 模板语法

如何从docker compose文件中访问env变量

在另一个模板中包含一个 terraform 模板

通过 Terraform 添加 AWS 安全组时出现问题

text 加密的env var到Terraform aws_secretsmanager_secret文件(带本地的数据对象)