Como faço para anexar, formatar e montar um volume na inicialização em ecs?

3

Eu quero que meu volume de persistência (ebs) seja separado da minha configuração de inicialização de grupo com escalonamento automático. Para que ele não seja acidentalmente excluído automaticamente pelo terraform ou algo assim. Também posso fazer algo como /mnt/taskname , para que eu tenha um volume de persistência diferente para cada tarefa que precisa de dados.

Veja como eu acho que funcionaria.

  1. instala o aws-cli por algum motivo está faltando (pacotes no cloud init), o que acontece tarde?
  2. use o comando aws para anexar o volume
  3. formate o volume usando o fs_setup no cloud init
  4. monte as partições usando montagens no cloud init

O problema é que isso não funcionará, porque eu não aconteceria até depois dos 3 e 4 (eu acho), e não tenho certeza se 2 é o caminho certo para anexar o volume.

Talvez eu não devesse usar a imagem otimizada do ecs? Parece que isso iria resolver o meu problema, mas então eu teria que descobrir o que mudar a imagem da Amazon (base?) para tê-lo configurado de outra forma como a imagem ecs? talvez haja outra maneira de anexar o volume do que o comando aws ? talvez alguma outra magia do que o que estou considerando totalmente?

    
por xenoterracide 07.05.2017 / 06:12

1 resposta

0

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
    
por 10.05.2017 / 05:12