Crear una instancia EC2 a partir de una máquina virtual local

0
1391

Índice de contenidos

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
  • Sistema Operativo: Linux Mint 19

2. Introducción

Resulta que tienes en local una máquina virtual con un montón de cosas instaladas súper curradas y ahora quieres que otras personas puedan trabajar contigo para ampliarla, ¿qué haces?

La solución puede ser crear una instancia EC2 en AWS a partir de esa máquina virtual y en este tutorial vamos a ver cómo hacerlo.

3. Vamos al lío

Nota: para seguir este tutorial necesitarás una cuenta de AWS y conlleva costes en la factura.

Partimos de que tenemos exportada nuestra máquina virtual a un fichero export.ova

Lo primero que vamos a hacer es instalar el CLI de AWS que nos evitará tener que usar la consola vía web. Para hacer la instalación en Ubuntu de la última versión es tan sencillo como ejecutar:

$> curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$> unzip awscli-bundle.zip
$> ./awscli-bundle/install -b ~/bin/aws

Y dentro del fichero .bashrc establecemos el ejecutable dentro del PATH:

export PATH=~/bin:$PATH

Hecho esto, lo que nos resta es configurar las herramientas con nuestras credenciales de AWS ejecutando el comando:

$> aws configure

Este comando nos va a solicitar introducir nuestro «AWS Access Key ID», nuestro «AWS Secret Access Key», un «Default Region Name» (es importante que lo establezcas correctamente, si por ejemplo, estás trabajando en eu-west-1b, la región que tienes que poner es eu-west-1) y por último el formato preferido de salida, que podemos establecer como yaml o json.

Ahora vamos a crear un bucket para subir nuestro fichero export.ova, para ello vamos a usar el CLI y vamos a ejecutar:

$>  aws s3 mb s3://

Nota: cambia por el nombre que le quieras dar al bucket.

Ahora para subir el fichero al bucket recién creado tenemos que ejecutar el comando:

$> aws s3 cp export.ova s3:///

Nota: este proceso será más o menos lento dependiendo del tamaño en GB de tu máquina virtual y el ancho de subida que tengas disponible. Haciéndolo desde la línea de comandos te aseguras de que la subida por mucho que tarde no se va a detener por pérdida de sesión como si puede ocurrirte si lo hacer a través de la consola web. Te lo digo por experiencia 😉

Mientras se sube el .ova podemos ir preparando los ficheros necesarios para la conversión de OVA a AMI.

El primer fichero a preparar es el que permite la importación de la máquina virtual, y tiene el siguiente contenido:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "vmie.amazonaws.com" },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals":{
         "sts:Externalid": "vmimport"
      }
    }
  }]
}

Para habilitarlo en la cuenta, en el mismo directorio donde hayamos almacenado el fichero, tenemos que ejecutar:

$> aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

Ahora creamos otro fichero role-policy.json con el rol y la política de permisos que tenemos que aplicar, tendrá el siguiente contenido:

{
 "Version": "2012-10-17",
 "Statement": [{
   "Effect": "Allow",
   "Action": [
     "s3:ListBucket",
     "s3:GetBucketLocation",
     "s3:FullAccess"
   ],
   "Resource": [
     "arn:aws:s3:::"
   ]},
   {
     "Effect": "Allow",
     "Action": [
       "s3:GetObject"
     ],
     "Resource": [
       "arn:aws:s3:::/*"
     ]
   },{
     "Effect": "Allow",
     "Action":[
       "ec2:ModifySnapshotAttribute",
       "ec2:CopySnapshot",
       "ec2:RegisterImage",
       "ec2:Describe*",
       "ec2:FullAccess"
     ],
     "Resource": "*"
   }
 ]
}

Y lo aplicamos ejecutando:

$> aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

Ahora vamos a crear el fichero que le va a indicar a AWS dónde está nuestro OVA para que inicie la conversión a AMI. Tendrá el siguiente contenido y lo guardamos con el nombre container.json:

[{
  "Description": "My OVA",
  "Format": "ova",
  "UserBucket": {
    "S3Bucket": "",
    "S3Key": "export.ova"
  }
}]

El siguiente paso solo se puede aplicar cuando se haya finalizado la subida del fichero .ova al bucket, solo entonces podemos ejecutar:

$> aws ec2 import-image --description "My OVA" --license-type BYOL --disk-containers file://containers.json

Este proceso es asíncrono así que una vez está lanzado podemos consultar el estado del proceso con el siguiente comando:

$> aws ec2 describe-import-image-tasks --import-task-ids import-ami-xxxx

Nota: las xxxx se corresponde con el identificador de la respuesta que nos dio en el anterior comando a este último; y los estados que nos podemos encontrar son:

  • active –> el proceso de importación está en progreso.
  • deleting –> el proceso de importación está siendo cancelado.
  • deleted –> el proceso de importación está cancelado.
  • updating –> el proceso de importación se está actualizando.
  • validating –> el proceso de importación se esta validando.
  • converting –> el proceso de importación está convirtiéndose en AMI.
  • completed –> el proceso de importación está completado y el AMI se puede utilizar ya.

Cuando nos devuelva completed solo nos resta ir al listado de instancias y como hicimos en el anterior tutorial creamos una instancia EC2 con el detalle de que en el primer paso seleccionamos la opción «My AMIS» encontrando el AMI que acabamos de crear a partir del fichero .ova.

El resto de pasos son iguales, con el detalle de que en el paso de crear volúmenes, éste ya viene creado dado que tiene todo el contenido de nuestra máquina virtual.

4. Conclusiones

Como ves, el proceso para publicar una máquina virtual como AMI en AWS no es complicado y aporta la ventaja fundamental de que varias personas puedan interactuar en la misma máquina, sin tener que hacer una instalación desde cero.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad