3 votos

¿Cómo puedo adjuntar, formatear y montar un volumen en el arranque en ecs?

Quiero que mi persistencia (ebs) volumen de estar separado de mi auto-escalado de grupo configuración de lanzamiento. Así que no va a ser accidentalmente auto eliminado por terraformar, o algo así. También yo pueda hacer algo como /mnt/taskname así que tengo un diferente persistencia de volumen para cada tarea que necesita de datos.

He aquí cómo creo que funcionaría.

  1. instalar aws-cli, por alguna razón, le falta (paquetes en la nube init), lo que sucede más tarde?
  2. el uso de aws comando para fijar el volumen
  3. formato del volumen utilizando fs_setup en la nube init
  4. montar las particiones usando monta en la nube init

El problema es que esto no va a funcionar, porque aunque 1 no ocurriría hasta después de 3 y 4 (creo), y no estoy realmente seguro de si 2 es el camino correcto a seguir para fijar el volumen.

Tal vez yo no debería estar usando la ec imagen optimizada? parece que podría resolver mi problema, pero entonces tendría que averiguar lo que a cambio de la amazonía (base?) imagen para tenerlo configurado de otra forma como el ecs de la imagen? tal vez haya otra manera de fijar el volumen de la aws comando? tal vez algunos otros magia de lo que estoy considerando en su totalidad?

0voto

Daniel Puntos 2171

Esta es una respuesta parcial, ya que todavía estoy trabajando en ella, primero, estoy usando un AMI simple de Amazon Linux, no el optimizado de ECS (que está desactualizado ...)

 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}"
  }
}
 

esta es la parte más importante, attach_volume.sh , que adjuntará el volumen, luego lo dividirá y formateará si es necesario.

 #!/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
 

entonces podemos usar la configuración de nube estándar para montarlo

 #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
 

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: