Terraform 如何实施";粘的;地形中的变量?

Terraform 如何实施";粘的;地形中的变量?,terraform,amazon-ecs,Terraform,Amazon Ecs,我想要一个具有以下属性的Terraform变量: 如果从未设置过,请使用默认值 如果未提供值,请使用上一次运行的值 如果提供了值,请使用该值并记住它 这个用例是针对AWS ECS标签的,我希望能够通过更改标签来部署新版本,这将导致Terraform创建新的任务定义并修改服务定义。但是,如果我运行“terraform apply”,而不传递新值,我不希望发生任何事情,即terraform会记住上一次运行的值 欢迎您的建议 本文档没有说明如何维护您需要的状态,但它确实提供了有关变量的有用信息-

我想要一个具有以下属性的Terraform变量:

  • 如果从未设置过,请使用默认值
  • 如果未提供值,请使用上一次运行的值
  • 如果提供了值,请使用该值并记住它
这个用例是针对AWS ECS标签的,我希望能够通过更改标签来部署新版本,这将导致Terraform创建新的任务定义并修改服务定义。但是,如果我运行“terraform apply”,而不传递新值,我不希望发生任何事情,即terraform会记住上一次运行的值


欢迎您的建议

本文档没有说明如何维护您需要的状态,但它确实提供了有关变量的有用信息-

你也可以-

variable "template" {
    type = "string"
    default = "01000000-0000-4000-8000-000030080200"
}

or 

variable "environment-type" {
  type = "map"

  default = {
    dev = "DEVELOPMENT"
    preprod = "PRE-PRODUCTION"
    prod = "PRODUCTION"
  }
}

我试图做一些类似的事情,偶然发现了这篇文章。最后我想出了一个解决方案,所以我想我应该和其他看到这篇文章的人分享

variable "maintenance" {
  description = "Set to active, disabled or previous (Default)"
  type        = string
  default     = "previous"
}

# This is used so we can lookup the previous value of the maintenance setting in the state file
data "terraform_remote_state" "bc" {
  backend = "gcs"

  config = {
    bucket = "terraform-bucket"
    prefix = "terraform/state"
  }

  workspace = terraform.workspace

  # Set a default value in case of an empty state file
  defaults = {
    maintenance = "disabled"
  }
}

locals {
  maintenance_status = var.maintenance == "previous" ? data.terraform_remote_state.bc.outputs.maintenance : var.maintenance
}

# Used to expose the current value to subsequent tf runs
output "maintenance" {
  value = example_resource.maintenance.status
}

然后可以使用命令行更改设置,但如果未指定,则将使用以前的值
terraformapply-var=“maintenance=active”

这并不是terraform真正的工作原理。您正在声明希望资源的外观。更改声明后,资源也会随之更改。不做任何更改,资源保持不变,无论应用配置多少次。