我希望我的持久性(ebs)卷与我的自动扩展组启动configuration分开。 这样它不会被terraform等意外自动删除。 另外,我可能会做一些像/mnt/taskname这样我有一个不同的持久性卷为每个需要数据的任务。
以下是我认为这将工作。
问题是,这不会起作用,因为1到3和4(我认为)之后才会发生,而且我不确定2是否是正确的方式去附加音量。
也许我不应该使用ecs优化图像? 似乎这样可以解决我的问题,但那么我不得不弄清楚如何改变亚马逊(基地?)图像,使其像其他configuration像ecs图像? 也许有另一种方法来附加音量比aws命令? 也许除了我正在考虑的其他魔法?
这是一个部分的答案,因为我仍然在努力,首先,我使用的是普通的Amazon Linux AMI,而不是ECS优化的(这已经过时了)
data "template_file" "AttachVolume" { template = "${file("cloudinit/attach_volume.sh")}" vars { volume = "${aws_ebs_volume.Nexus.id}" } } data "template_cloudinit_config" "CloudInit" { part { filename = "fs.cfg" content_type = "text/cloud-config" content = "${file("cloudinit/fs.yml")}" } part { filename = "attach_volume.sh" content_type = "text/cloud-boothook" content = "${data.template_file.AttachVolume.rendered}" } }
这里是最重要的部分, attach_volume.sh ,它将附加音量,然后分区并根据需要进行格式化。
#!/bin/sh set -x EC2_VOLUME_ID="${volume}" EC2_INSTANCE_ID="`curl --silent http://169.254.169.254/latest/meta-data/instance-id`" aws ec2 attach-volume --volume-id $EC2_VOLUME_ID --instance-id $EC2_INSTANCE_ID --device /dev/xvdh --region us-east-1 while [ ! -d /sys/block/xvdh ]; do sleep 1; done if [ ! -d /sys/block/xvdh/xvdh1 ]; then echo -e "g\nn\np\n1\n\n\nw" | fdisk /dev/xvdh mkfs.ext4 /dev/xvdh1 fi
那么我们可以使用标准的云configuration来挂载它
#cloud-config --- mounts: - [ xvdh, '/srv/nexus', 'auto', 'defaults,noexec', '0', '0' ] runcmd: - [ cloud-init-per, instance, chmod, chmod, 1777, /srv/nexus ] # make like temp, then docker can write whatever user directories in their - [ cloud-init-per, instance, docker, service, docker, start ] # start docker - [ cloud-init-per, instance, ecs, start, ecs ] # start ecs