【问题标题】:Conditional expressions with Terraform deploying AWS resources使用 Terraform 部署 AWS 资源的条件表达式
【发布时间】:2021-09-13 21:24:22
【问题描述】:

我当前的 Terraform 设置包含 3 个模板文件。每个模板文件都链接到一个启动配置资源,然后用于通过自动缩放事件启动实例。在每个模板文件中,都有一个 AWS CLI 命令用于将现有 EBS 卷附加到通过自动扩展启动的新实例。我在编写条件表达式以将变量传递给用于附加特定驱动器的 AWS CLI 命令时遇到了一些麻烦。由于我有 3 个模板文件和 3 个 EBS 卷,我希望将其附加到其自己的自动缩放组中的每个实例,我不相信我的条件表达式中可以有超过 2 个表达式。任何关于如何实现这一目标的建议都会有所帮助。

模板文件

data "template_file" "ML_10_user_data" {
count    = "${(var.enable ? 1 : 0) * var.number_of_zones}" // 3 templates
template = "${file("userdata.sh")}

  vars {
    ebs_volume = "${count.index == 0 ? vol-xxxxxxxxxxxxxxxxx : vol-xxxxxxxxxxxxxxxxx}" // how to include 3rd EBS volume?
  }
}

Userdata.sh

#!/bin/bash
aws ec2 attach-volume --volume-id ${EBS_VOLUME} --instance_id `curl http://169.254.169.254/latest/meta-data/instance-id` --device /dev/sdf

EBS_VOLUME=${ebs_volume}

任何关于如何完成我想要完成的工作的建议都将不胜感激。

【问题讨论】:

  • 这里有 3 个独立的 ASG 和 3 个独立的启动模板吗?如果您只是在做单实例 ASG,是否有理由将它们作为 ASG 而不是普通实例?
  • 我们在此环境中托管的应用程序建议使用自动缩放组。
  • 如果没有发生实际的自动缩放,有什么理由吗?

标签: bash amazon-web-services templates terraform launch-configuration


【解决方案1】:

最好的办法是把它放在一个列表中:

variable "volumes" {
  default = ["vol-1111","vol-2222","vol-333"]
}

data "template_file" "user_data" {
  count    = "${(var.enable ? 1 : 0) * var.number_of_zones}"
  template = "${file("userdata.sh")}"

  vars {
    ebs_volume = "${var.volumes[count.index]}"
  }
}

但是,如果这些实例应该在 ASG 中,这不是一个很好的设计。 ASG 中的实例应该相同、可互换和一次性。它们可以随时被 AWS 或扩展活动终止,您应该将这些实例视为一个组,而不是单个实体。

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 2018-01-21
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2021-12-18
    • 2022-01-25
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多