微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Terraform 部署 AWS 资源的条件表达式

如何解决使用 Terraform 部署 AWS 资源的条件表达式

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

Template_file

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}

任何关于我如何完成我正在努力完成的工作的建议将不胜感激。

解决方法

最好的方法是将其放入列表

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 或扩展活动可以随时终止它们,您应该将这些实例视为一个组,而不是单个实体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?