根据逻辑参数选择 AMI

时间:2021-06-24 07:53:02

标签: terraform terraform-provider-aws

目前,我的 terraform 基于硬编码到环境中的 AMI 创建了一个实例。我的问题是这个特定资源有三个可能的用例。是否可以将其写入 terraform,以便如果我输入变量“Dev”,将选择一个 AMI,并选择“Prod”另一个 AMI?

2 个答案:

答案 0 :(得分:0)

  1. 定义一个变量为 env

  2. 基于值覆盖变量值

    var.env != "dev" ? var.env : "dev ami "

  3. 在资源中使用变量作为ami

答案 1 :(得分:0)

听起来您想要一个指定环境的输入变量,然后根据环境选择不同的值。

让我们先定义变量,这样我们就能明白我们在说什么:

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]
相关问题