Esta é uma resposta parcial, pois ainda estou trabalhando com ela. Primeiro, estou usando uma Amazon AMI simples do Linux, não a otimizada do ECS (que está desatualizada ...)
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}"
}
}
aqui está a parte mais importante, o attach_volume.sh
, que irá anexar o volume, depois particioná-lo e formatá-lo, se necessário.
#!/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
então podemos usar a configuração padrão da nuvem para montá-lo
#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