从Terraform Cloud获取变量

时间:2020-10-23 08:53:10

标签: terraform

我正在尝试https://app.terraform.io/免费计划

我已经在UI中设置了一些变量。

现在,我想在我的Terraform代码中使用这些变量。

首先我设置为后端

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 2.70"
    }
  }
  backend "remote" {
    organization = "mycompany"

    workspaces {
      name = "DEV"
    }
  }
}

我也设置了数据源

data "terraform_remote_state" "mycompany" {
  backend = "remote"

  config = {
    organization = "mycompany"

    workspaces = {
      name = "DEV"
    }
  }
}

现在我尝试使用这些变量

provider "aws" {
  region     = var.region
  access_key = data.terraform_remote_state.mycomany.aws_access_key 
  secret_key = data.terraform_remote_state.mycomany.aws_secret_key 
}

当我运行Terraform时,我得到...

Error: Unsupported attribute

  on main.tf line 3, in provider "aws":
   3:   access_key = data.terraform_remote_state.mycomany.aws_access_key

This object has no argument, nested block, or exported attribute named
"aws_access_key"

我已经阅读了https://www.terraform.io/docs/cloud/workspaces/variables.htmlhttps://www.hashicorp.com/blog/variable-management-in-terraform-cloud和其他一些文档。

我无法理解这个……(来自https://www.terraform.io/docs/cloud/workspaces/variables.html

查找变量名 Terraform Cloud无法从工作空间的Terraform代码中自动发现变量名称。您必须通过阅读代码或文档发现必要的变量名,然后手动输入它们。

如果缺少必需的输入变量,则工作空间中的Terraform计划将失败并在日志中打印说明。

所以,我的目标是。

如何同时使用Terraform云中的普通变量和环境变量?

1 个答案:

答案 0 :(得分:0)

我不需要数据源。

我需要将变量(无值)注册到例如variables.tf

intput: this,is,a,test
output: {this, is, a, test} --> TRUE output

input: this,is not,a,test
output: {this, is} --> FALSE output --> Desired output: {this, is not, a, test}

现在,您可以照常使用变量了

############################# 
# FROM WORKSPACE
#############################
variable "aws_access_key" {}
variable "aws_secret_key" {}

要在工作空间之间切换(以重用我们的代码),我们可以使用前缀而不是名称来更改远程配置。然后,terraform CLI要求我们提供工作空间,或者您可以在terraform工作空间中选择

provider "aws" {
  region     = var.region
  access_key = var.aws_access_key 
  secret_key = var.aws_secret_key 
}

在这种情况下,我的工作区是mycompany-DEV和mycompany-PRO