我有 3 个自动缩放组,它们都使用略有不同的模板文件。我拥有的 3 个模板文件的不同之处在于,每个模板文件在自动缩放组中的实例启动时附加不同的 EBS 卷。我试图弄清楚如何使用 count 将这些不同的模板文件传递给每个自动缩放组。目前,Terraform 代码设置为一个模板文件资源使用 1 个文件的位置,但我需要它来确定如何选择第二个和第三个模板文件。我已经对 Terraform 与之集成的Cloudinit Config资源进行了一些研究,但不确定这样的事情是否会对我有所帮助。任何意见,将不胜感激。以下是我当前的 Terraform 代码的设置方式。
模板文件
data "template_file" "user_data" {
count = "${(var.enable ? 1 : 0) * var.number_of_zones}"
template = "${file("userdata.sh")}"
vars {
node = "Node${count.index + 1}"
}
}
启动配置
resource "aws_launch_configuration" "launch_configuration" {
count = "${(var.enable ? 1 : 0) * var.number_of_zones}"
name = "${var.cluster_name}-launch_node_${count.index}"
key_name = "${var.key_name2}"
image_id = "${lookup(var.amis, "${var.aws_region}.${var.licensee_key == "" && var.licensee == "" ? "enterprise" : "byol"}")}"
user_data = "${element(data.template_file.user_data.*.rendered, count.index)}"
security_groups = [
"${aws_security_group.instance_security_group.id}",
]
instance_type = "${var.instance_type}"
iam_instance_profile = "${aws_iam_instance_profile.instance_host_profile.name}"
ebs_block_device {
device_name = "/dev/sdf"
no_device = true
}
lifecycle {
create_before_destroy = true
}
}
用户数据脚本
#!/bin/bash
# Attach the right EBS volume
aws ec2 attach-volume --volume-id vol-xxxxxxxxxxxxxxxxx --instance_id `curl http://169.254.169.254/latest/meta-data/instance-id` --device /dev/sdf
我拥有的每个用户数据脚本都会在实例启动时挂载不同的卷。关于如何在不创建多个 template_file 资源块的情况下传递不同值的任何建议都会有所帮助。正在使用的 Terraform 版本是 0.11.10。