【发布时间】:2021-06-24 07:53:02
【问题描述】:
目前,我的 terraform 根据硬编码到环境中的 AMI 创建了一个实例。我遇到的问题是这个特定资源有三种可能的用例。是否可以将其写入 terraform,以便如果我要输入变量“Dev”,将选择一个 AMI,并选择“Prod”另一个 AMI?
【问题讨论】:
标签: terraform terraform-provider-aws
目前,我的 terraform 根据硬编码到环境中的 AMI 创建了一个实例。我遇到的问题是这个特定资源有三种可能的用例。是否可以将其写入 terraform,以便如果我要输入变量“Dev”,将选择一个 AMI,并选择“Prod”另一个 AMI?
【问题讨论】:
标签: terraform terraform-provider-aws
定义一个变量为 env
根据值覆盖变量值
var.env != "dev" ? var.env : "开发者朋友"
将变量用作资源中的ami
【讨论】:
听起来您希望有一个输入变量指定环境,然后根据环境选择不同的值。
让我们先定义变量,这样我们就可以看到我们在说什么了:
variable "environment" {
type = string
validation {
condition = contains(["Dev", "Prod"], var.environment)
error_message = "Environment must be either 'Dev' or 'Prod'."
}
}
定义好之后,我们的问题是根据给定的字符串查找一个值。一种典型的做法是定义一个映射值,为每个有效输入值指定一个输出值,在 Terraform 中我们可以将这样的东西声明为本地值:
locals {
ami_ids = tomap({
Dev = "ami-abc123"
Prod = "ami-xyz789"
})
}
现在当需要引用指定环境对应的AMI ID时,可以使用索引语法通过环境键访问相应的元素:
ami = local.ami_ids[var.environment]
【讨论】: