Closed
Description
I'm trying to setup a multi-node cluster with attached ebs volumes. An example below:
resource "aws_instance" "nodes" {
instance_type = "${var.model}"
key_name = "${var.ec2_keypair}"
ami = "${lookup(var.zk_amis, var.region)}"
count = "${var.node_count}"
vpc_security_group_ids = ["${aws_security_group.default.id}"]
subnet_id = "${lookup(var.subnet_ids, element(keys(var.subnet_ids), count.index))}"
associate_public_ip_address = true
user_data = "${file("cloud_init")}"
tags {
Name = "${var.cluster_name}-${count.index}"
}
}
resource "aws_ebs_volume" "node-ebs" {
count = "${var.node-count}"
availability_zone = "${element(keys(var.subnet_ids), count.index)}"
size = 100
tags {
Name = "${var.cluster_name}-ebs-${count.index}"
}
}
resource "aws_volume_attachment" "node-attach" {
count = "${var.node_count}"
device_name = "/dev/xvdh"
volume_id = "${element(aws_ebs_volume.node-ebs.*.id, count.index)}"
instance_id = "${element(aws_instance.nodes.*.id, count.index)}"
}
If a change happens to a single node (for instance if a single ec2 instance is terminated) ALL of the aws_volume_attachments are recreated.
Clearly we would not want volume attachments to be removed in a production environment. Worse than that, in conjunction with #2957 you first must unmount these attachments before they can be recreated. This has the effect of making volume attachments only viable on brand new clusters.