1

我当前的 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?
  }
}

用户数据.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}

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

4

1 回答 1

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-07-02T00:18:41.033 回答