terraform中的aws_volume_attachment资源需要instance_id ...我的问题是我要将卷安装到的实例是ECS群集的一部分,在传递实例的实例ID时我似乎找不到任何聪明的例子将ECS群集添加到aws_volume_attachment,以便我可以安装现有的EBS卷。
使用ARN不起作用。
resource "aws_volume_attachment" "ebs_att" {
device_name = "/dev/sdp"
volume_id = "${aws_ebs_volume.example.id}"
instance_id = "${aws_instance.web.id}"
}
编辑 我基本上为实例增强了脚本,而我的地形看起来像这样:
data "template_file" "fleet-boothook" {
template = "${file("${path.module}/boothook.tpl")}"
vars {
ecs_cluster_name = "${aws_ecs_cluster.this.name}"
ebs_volume_id = "${var.singleton_cluster_ebs_volume}"
}
}
答案 0 :(得分:0)
我也正在研究这个问题,我即将接受的结论是,没有简单的方法可以做到这一点。该结论得到this issue和this other one的支持。我已经看到了第三方解决方案like this one,但我不愿意在基础架构中诉诸第三方应用。
相反,this repo声称已经实现了向节点提供EFS的方法。我知道它不是EBS,但是它可以提供一种在容器和主EC2实例之间共享数据的方法,而不管容器运行在哪个特定实例上。
也许您可以找到一种将现有EC2实例附加到群集的方法,以便在配置它们时有更多控制权。这可能是我要尝试的方法,但是我意识到它不能达到使用ecs的目的的一半,后者是抽象化启动容器而不关心基础主机基础结构的方式。
修改:
我设法创建了一个ECS集群,其中所有实例都安装了EFS分区。
在与创建集群[1]相同的可用性区域中创建EFS卷。确保在专用子网中创建它。
修改启动配置UserData
[2]脚本以安装amazon-efs-utils
[3]。如果您使用的是经过ecs优化的Amazon linux映像,只需将以下内容添加到脚本中:
sudo yum install -y amazon-efs-utils
UserData
bash脚本中: mkdir -p /mnt/efs
mount -t efs fs-12345678:/ /mnt/efs
将fs-12345678
更改为EFS卷的ID。
我想您可以使用诸如samba之类的东西来公开EBS卷,但是EFS不需要提供专用的EC2实例,它可以接收dns并可以直接挂载。
[1] https://docs.aws.amazon.com/efs/latest/ug/troubleshooting-efs-mounting.html#mount-fails-dns-name
[2] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts
[3] https://docs.aws.amazon.com/efs/latest/ug/using-amazon-efs-utils.html