Las instancias de EC2 que corren con EBS (Elastic Block Storage) cuando
se crean vienen con un tamaño relativamente pequeño (talvez 8 Gb o un
poco más), ¿que hay si este tamaño lo quiero incrementar?, ¿que tengo que
hacer?
Assumptions : Se asume de que ya se tienen instaladas y configuradas las herramientas
de línea de comandos de AWS, también cabe mencionar que los comandos que
aquí aparecen les precede el prompt $, en el caso de la instancia remota
también precedido por el host.
Backups: Respaldar información sensible, si se tiene información
importante en /mnt respaldarla ya que esta se perderá al hacer este
proceso.
Al conectarme por ssh a mi instancia y verificar el tamaño del
filesystem veo que tan sólo tiene 7.9G.
1
2
3
4
5
6
7
ubuntu@ip-10-170-185-61:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.9G 773M 6.8G 11% /
udev 288M 8.0K 288M 1% /dev
tmpfs 119M 160K 118M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 296M 0 296M 0% /run/shm
Siguiendo el tutorial de Eric Hammond de alestic.com (y modificado
ligeramente ya que algunas cosas no corrieron), desde mi lap donde
tengo instalada la herramienta de aws, corro lo siguiente, primero
hay que obtener el id de instancia.
1
2
3
4
5
$ ec2-describe-instances
RESERVATION r-54a9ea12 672080195794 default
INSTANCE i-2ddc0374 ami-0d153248 ec2-50-18-95-56.us-west-1.compute.amazonaws.com ip-10-170-185-61.us-west-1.compute.internal running jcastaneyra_west 0 t1.micro 2012-10-12T14:47:45+0000 us-west-1c aki-8d396bc8 monitoring-disabled 50.18.95.56 10.170.185.61 ebs paravirtual xen vcdyJ1350053264046 sg-6b43132e default
BLOCKDEVICE /dev/sda1 vol-3885d716 2012-10-12T14:47:49.000Z true
TAG instance i-2ddc0374 Name
El id es i-2ddc0374, y el tamaño al que quiero llegar es de 20 Gb, por
lo que voy a correr lo siguiente desde línea de comandos.
1
2
$ instanceid=i-2ddc0374
$ size=20
Hay que obtener el volumen y la zona actual de la instancia.
1
2
$ oldvolumeid=$(ec2-describe-instances $instanceid | egrep "^BLOCKDEVICE./dev/sda1" | cut -f3)
$ zone=$(ec2-describe-instances $instanceid | egrep "^INSTANCE" | cut -f12)
Si se ejecuta el siguiente comando debería aparecer.
1
2
$ echo "instance $instanceid in $zone with original volume $oldvolumeid"
instance i-2ddc0374 in us-west-1c with original volume vol-3885d716
Ahora, hay que detener la instancia (ojo, detener no terminar).
1
2
$ ec2-stop-instances $instanceid
INSTANCE i-2ddc0374 running stopping
Desasociar el volumen actual de la instancia.
1
2
$ while ! ec2-detach-volume $oldvolumeid; do sleep 1; done
ATTACHMENT vol-3885d716 i-2ddc0374 /dev/sda1 detaching 2012-10-12T14:47:49+0000
Crear un snapshot del volumen actual.
1
2
3
4
$ snapshotid=$(ec2-create-snapshot $oldvolumeid | cut -f2)
$ while ec2-describe-snapshots $snapshotid | grep -q pending; do sleep 1; done
$ echo "snapshot: $snapshotid"
snapshot: snap-5d91ed71
Crear un nuevo volumen basado en el snapshot recien creado.
1
2
3
$ newvolumeid=$(ec2-create-volume --availability-zone $zone --size $size --snapshot $snapshotid | cut -f2)
$ echo "new volume: $newvolumeid"
new volume: vol-e6b0e2c8
Asociar el nuevo volumen a la instancia.
1
2
3
$ ec2-attach-volume --instance $instanceid --device /dev/sda1 $newvolumeid
ATTACHMENT vol-e6b0e2c8 i-2ddc0374 /dev/sda1 attaching 2012-10-12T15:25:12+0000
$ while ! ec2-describe-volumes $newvolumeid | grep -q attached; do sleep 1; done
Ahora bien, se arranca la instancia.
1
2
3
$ ec2-start-instances $instanceid
INSTANCE i-2ddc0374 stopped pending
$ while ! ec2-describe-instances $instanceid | grep -q running; do sleep 1; done
Buscamos ahora la nueva ip pública.
NOTA : si la instancia tenía una elastic ip
asociada tendremos que volverla a asociar de nuevo.
1
2
3
4
5
$ ec2-describe-instances $instanceid
RESERVATION r-54a9ea12 672080195794 default
INSTANCE i-2ddc0374 ami-0d153248 ec2-50-18-24-164.us-west-1.compute.amazonaws.com ip-10-170-201-117.us-west-1.compute.internal running jcastaneyra_west 0 t1.micro 2012-10-12T15:26:54+0000 us-west-1c aki-8d396bc8 monitoring-disabled 50.18.24.164 10.170.201.117 ebs paravirtual xen vcdyJ1350053264046 sg-6b43132e default
BLOCKDEVICE /dev/sda1 vol-e6b0e2c8 2012-10-12T15:25:12.000Z false
TAG instance i-2ddc0374 Name
Al conectarnos de nueva cuenta con ssh vemos que el filesystem ya está
con un nuevo tamaño.
1
2
3
4
5
6
7
ubuntu@ip-10-170-201-117:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 777M 18G 5% /
udev 288M 8.0K 288M 1% /dev
tmpfs 119M 160K 118M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 296M 0 296M 0% /run/shm
Después de esto ya podríamos borrar el volumen viejo, e incluso si
estamos seguros que todo quedó bien podríamos también borrar el
snapshot.
1
2
3
4
$ ec2-delete-volume $oldvolumeid
VOLUME vol-3885d716
$ ec2-delete-snapshot $snapshotid
SNAPSHOT snap-5d91ed71
NOTA: Como el nuevo volumen fue creado manualmente, al momento de
terminar la instancia este no se borra automáticamente, creo que hay un
parametro en los atributos de la instancia para volver a habilitar el
borrado automático, pero yo no lo encontré, pero digo, borrarlo
manualmente tampoco me llevó mucho tiempo.
LINKS.
alestic blog