首页 > 解决方案 > 如何通过 CLI 设置 Terraform 工作区变量?

问题描述

我在 terraform 中使用工作区在运行时分隔环境,以便我可以使用不同的配置来分隔部署。

但是,我试图弄清楚如何设置 CLI 变量。

我的变量.tf:

locals {
  environment     = "${terraform.workspace}"
  lambda_vars = {
    deploy_version        = "0.1"
    deploy_name           = "deployment"
    deploy_secret_1       = "somesupersecretsecret"
  }
}

这些变量在我的配置中使用。

我正在尝试使用 CLI 设置新变量,但它不起作用,而且我似乎找不到任何关于如何实现这一点的参考。我试过了:

terraform apply -var 'local.lambda_vars={ deploy_secret_1 = "somesupersecretsecret1" }'

我觉得我正在以错误的方式解决这个问题。

任何人都可以帮忙吗?

标签: variablescommand-line-interfaceterraform

解决方案


如果您希望能够配置变量,那么您应该使用实际变量而不是locals。局部变量是一种组合事物的方式,因此您可以避免重复自己或可以使用插值。变量根本不允许任何插值。

因此,在您的情况下,您应该为您希望能够配置的内容声明单独的变量。如果只是这样,deploy_secret_1那么您可以使用以下内容执行此操作:

variable "deploy_secret_1" {
  default = "somesupersecretsecret"
}

locals {
  environment = terraform.workspace

  lambda_vars = {
    deploy_version  = "0.1"
    deploy_name     = "deployment"
    deploy_secret_1 = var.deploy_secret_1
  }
}

现在,如果您运行以下命令:

terraform apply -var 'deploy_secret_1=overriding-secret'

它应该覆盖该deploy_secret_1部分,但保留其余部分。如果您没有deploy_secret_1通过命令行、环境变量或tfvars文件指定变量,那么它将默认为somesupersecretsecret. 如果你宁愿强制它被定义并且如果你不指定变量则会出错,那么只需省略default变量声明的参数。

如果您希望能够覆盖更多的东西,那么您应该声明更多的变量。


推荐阅读