Terraform 地形条件-如果变量不存在

Terraform 地形条件-如果变量不存在,terraform,Terraform,我有以下情况: resource "aws_elastic_beanstalk_application" "service" { appversion_lifecycle { service_role = "service-role" delete_source_from_s3 = "${var.env == "production" ? false : true}" } } 如果将var.env设置为production,我将得到想要的结果 谢谢

我有以下情况:

resource "aws_elastic_beanstalk_application" "service" {
  appversion_lifecycle {
    service_role          = "service-role"
    delete_source_from_s3 = "${var.env == "production" ?   false : true}"
  }
}
如果将var.env设置为production,我将得到想要的结果

谢谢


但是,如果未定义var.env,terraform plan将失败,因为从未定义该变量。我怎样才能让它工作,而不必定义那个变量

如果您使用的是Terraform 0.12或更高版本,则可以将特殊值null指定给参数,以将其标记为“unset”


不能将其保留为空,当前版本则不能。

可以将变量的默认值设置为空字符串:

variable "env" {
  description = "Env where the module is deployed."
  type        = string
  default     = ""
}
完成后,您的检查
var.env==“production”
将生成
false
,参数delete\u source\u from\u s3将分配给值
true

旁注,语句中不需要插入

“${var.env==“生产”?false:true}”

随你去吧

delete_source_from_s3 = var.env == "production" ? false : true

现在似乎你也可以用“try”来检查设置是否正确

try(var.env, false)
之后,您的代码将正常工作,因为var.env现在使用值“false”定义,即使“var.env”从未在某处定义过


您的意思是不必定义默认值吗?但以后如何检查它是否未设置?显然,您可以检查
var.env==null
这个答案帮助我完成了当前项目,为安全组和规则创建了一个模块。我还没有让它完全工作,但这允许我设置值为空,当我扁平化一个复杂的地图建立了一个列表。我不知道这是存在的。太神了非常感谢。
try(var.env, false)