Está en la página 1de 13

Get unlimited access Open in app

Joan Nin
Mar 27, 2020 · 6 min read

Save

Como migrar VirtualBox VM a AWS EC2

Me imagino que como yo muchos han pensado migrar alguna VM en Virtualbox a AWS
para aprovechar las ventajas que ofrece cloud computing, aquí le dejo una pequeña
guía básica para poder lograrlo.

Requerimientos:
Virtualbox

AWS

AWS CLI
Para exportar un dispositivo su VM debe estar apagada. Si la máquina está en estado
Get unlimited access Open in app
SAVED, no se exportará.

Una vez que la máquina virtual en cuestión este apaga, vaya a la ventana principal de
VirtualBox y haga clic en File | Export Appliance. En la ventana resultante, ubique y
seleccione la VM que se va a exportar y haga clic en Siguiente

💡 Tips:

El acceso directo o shortcut para el Export es CTRL + E

Seleccionar en Format: Open Virtualization Format 2.0

Recordar el directorio donde se va a exportar nuestra VM en mi caso es


/home/ninjoan/Documents/

Renombrar el archivo de .ova a .ovf

Opción de Mac Address Policy seleccionamos include all networks adapter MAC

addresses
Siguiente Paso Next
Get unlimited access Open in app

Finalizamos con EXPORT

Esto tomara unos minutos dependiendo de que tan grande sea la VM.

Luego de eso vamos al folder donde se realizo el Export en mi caso es


/home/ninjoan/Documents/ aqui encontraremos 3 archivos pero el que nos interesa es el
que tiene la extension .vmdk

AWS
Vamos a nuestra consola en AWS y creamos nuestro Amazon S3 Bucket.
Get unlimited access Open in app

Le damos un nombre que recordemos a nuestro S3 y selecciona la región correcta.

En mi caso mi Amazon S3 Bucket es llamada VM-Images cree un subfolder llamado


LinuxOS donde voy almacenar mis otras imágenes de VMs es solo por temas de
organización nada más.

Ahora procederemos a subir la imagen de nuestra VM que habíamos exportado, vamos


a subir el archivo terminado en .vmdk lo buscamos y le damos a Uploads esto tardará
un tiempo dependiendo de tu velocidad de upload.

IAM
Para aprovechar el tiempo mientras subimos nuestra VM, vamos a crear un usuario
IAM para nuestro AWS CLI

https://console.aws.amazon.com/iam/home#/users
Get unlimited access Open in app

Add User y creamos nuestro usuario importante recordar el nombre y marcamos la


opción.

Programmatic access

Enables an access key ID and secret access key for the AWS API, CLI, SDK, and other
development tools.
Get unlimited access Open in app

Seguimos el Wizard hasta llegar a esta pantalla

Copiar el texto en Access key ID y Secret access key y pasamos al próximo paso.

AWS CLI
Necesitamos tener instalado el AWS CLI en nuestra PC, el software está disponible para
Get unlimited access Open in app
Windows, MacOs y Linux

Mas información:
Instalación de la AWS CLI versión 2 en Linux

Instalación de AWS CLI versión 2 en macOS

Instalación de la AWS CLI versión 2 en Windows

Si utilizas Windows en mi caso fue más práctico y rápido crear una VM con Ubuntu
Server e instalar AWS CLI para Linux ya que en 4 Pasos tienes listo

AWS CLI.

Luego de que tengas tu VM con Ubuntu listo corremos estos comandos

1. Actualizamos nuestro Ubuntu e instalamos los paquetes necesarios.

sudo apt-get update -y


sudo apt-get install python-pip -y

2. Instalamos el AWS CLI

sudo apt-get install awscli

Ahora configuramos nuestro AWS CLI con los datos del IAM que creamos
anteriormente, ejecutando este comando.

aws configure

Este no solicitará información sobre un Access key ID y Secret access key esto lo
vamos a completar con la información del paso anterior.
AWS Access Key ID [None]: TU ACCESS KEY ID Get unlimited access Open in app

AWS Secret Access Key [None]: TU SECRET ACCESS KEY


Default region name [None]: TU REGION ****
Default output format [None]: json

Listo AWS CLI activado y listo para trabajar.

Ahora vamos a darle a nuestro AWS CLI las variables que va a utilizar para la
migración, copia y pega los siguientes comandos en tu consola AWS CLI

bucket_name="VM-Images"
vm_image_name="LinuxOS/NOMBRE-DEL-ARCHIVO-QUE-SUBISTE.vmdk"

Siguiente Paso creación de la política de Trust

Copiar y pegar el siguiente texto

cat > "trust-policy.json" << "EOF"

"Version": "2012–10–17",

"Statement": [

"Effect": "Allow",

"Principal": { "Service": "vmie.amazonaws.com" },

"Action": "sts:AssumeRole",

"Condition": {

"StringEquals":{

"sts:Externalid": "vmimport"

EOF
Si todo salio bien esto va a crear un archivo llamado trust-policy.json en nuestro AWS
Get unlimited access Open in app
CLI

Creación del IAM ROLE para la importación de la VM


Ejecutamos el siguiente comando en nuestra AWS CLI

aws iam create-role — role-name vmimport — assume-role-policy-document


"file://trust-policy.json"

Creamos el IAM Policy


Esta política va está incluida en el role vmimport creado en el paso anterior. El nombre
del Amazon S3 Bucket va ser elegido de cuando creamos las variables al inicio

echo '{

"Version":"2012–10–17",

"Statement":[

"Effect":"Allow",

"Action":[

"s3:GetBucketLocation",

"s3:GetObject",

"s3:ListBucket"

],

"Resource":[

"arn:aws:s3:::'${bucket_name}'",

"arn:aws:s3:::'${bucket_name}'/*"

},

"Effect":"Allow",

"Action":[

"ec2:ModifySnapshotAttribute",

"ec2:CopySnapshot",

"ec2:RegisterImage",

"ec2:Describe*"

],

"Resource":"*"

' | sudo tee role-policy.json


Preparamos la política para el IAM Role (vmimport)
Get unlimited access Open in app
Copiar y pegar

aws iam put-role-policy --role-name vmimport \

--policy-name vmimport \

--policy-document "file://role-policy.json"

Preparamos la tarea para la importación de la VM


El siguiente comando ejecutara la tarea de importación

echo '[

"Description": "CAMBIAME",

"Format": "vmdk",

"UserBucket": {

"S3Bucket": "'${bucket_name}'",

"S3Key": "'${vm_image_name}'"

}]

' > containers.json


📝 NOTA: Es bueno que le demos una descripción fácil de recordar donde
dice CAMBIAME le daremos un nombre fácil ejemplo si la VM es un Centos
llámala Centos, si es una aplicación llámala por su nombre ejemplo:
Debian-ERP

Inicio de importacion

aws ec2 import-image - description "NOMBRE-QUE-LE-DISTE-A-TU-VM" -


disk-containers "file://containers.json"

Al ejecutar el comando anterior tendrás esta respuesta en tu AWS CLI

aws ec2 import-image - description "NOMBRE-QUE-LE-DISTE-A-TU-VM" -


disk-containers "file://containers.json"

Al ejecutar el comando anterior tendrás esta respuesta en tu AWS CLI

"Description": "NOMBRE-QUE-LE-DISTE-A-TU-VM",

"ImportTaskId": "import-ami-NUMERO-GENERADO",
Get unlimited access Open in app
"Progress": "2",

"SnapshotDetails": [

"DiskImageSize": 0.0,

"Format": "VMDK",

"UserBucket": {

"S3Bucket": "VM-Images",

"S3Key": "LinuxOS/NOMBRE-DEL-ARCHIVO-QUE-SUBISTE.vmdk"

],

"Status": "active",

"StatusMessage": "pending"

Apunta el nombre de la ImportTaskId para revisar el progreso de la misma

Para revisar el progreso de la tarea

aws ec2 describe-import-image-tasks — import-task-ids "import-ami-


NUMERO-GENERADO"

Ejemplo de consulta de estado de la tarea

# VM Image being updated to AMI

[root:tmp]# aws ec2 describe-import-image-tasks - import-task-ids


"import-ami-0d6db3a35d431e4e3"

"ImportImageTasks": [

"Description": "centosv7",

"ImportTaskId": "import-ami-0d6db3a35d431e4e3",

"Progress": "30",

"SnapshotDetails": [

"Description": "centosv7",

"DiskImageSize": 931182592.0,

"Format": "VMDK",

"Status": "completed",

"UserBucket": {

"S3Bucket": "n-backup",

"S3Key": "VM-Import/vCentOS7-disk002.vmdk"

}
Get unlimited access Open in app
}

],

"Status": "active",

"StatusMessage": "updating"

Aquí vemos que el estado es updating esto cambiará hasta llegar a el estado "Status":

"completed" esto toma tu tiempo asi que tranquilo.

Si todo salio bien podrás ir a tu Amazon EC2 y en la opción Images > AMIs veras tu VM
cargada en AWS solo tienes que darle a Launch y completar el wizard.

📝 NOTA: El usuario y password de la VM que subiste son los mismo que


tenías cuando estaba en VirtualBox.

Listo.

Cualquier duda me pueden escribir.


Get unlimited access Open in app

También podría gustarte