【问题标题】:Selecting an AMI based on a logical argument根据逻辑参数选择 AMI
【发布时间】:2021-06-24 07:53:02
【问题描述】:

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

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:
    1. 定义一个变量为 env

    2. 根据值覆盖变量值

      var.env != "dev" ? var.env : "开发者朋友"

    3. 将变量用作资源中的ami

    【讨论】:

      【解决方案2】:

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

      让我们先定义变量,这样我们就可以看到我们在说什么了:

      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]
      

      【讨论】:

      • 非常感谢您花时间以如此全面的方式回答这个问题。希望这会让生活更轻松。
      猜你喜欢
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多