Export VM to AWS
Updated at: 31/08/2017
Questi dovrebbero essere i passi per esportare una macchina virtuale create in locale (ad esempio per sfruttare i vantaggi di una configurazione LVM) su Amazon.
Questa è la guida ufficiale di riferimento di Amazon, con tutti i vari link che si inseguono:
https://aws.amazon.com/ec2/vm-import/
Nella macchina virtuale, installiamo i componenti pre-requisiti:
cd /opt/source
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
pip install awscli --upgrade --user
Configuriamo l'accesso
solo tramite chiave ssh:
http://wiki.sinergo.it/?p=403
Quindi spegniamo la VM e convertiamo il disco in .ova
Da VirtualBox:
File -> export appliance ->
[selezionare la VM] -> Format: OVF 1.0
Carichiamo il file ottenuto nel bucket S3 (nel nostro esmpio, ipotizziamo che il bucket si chiami
vm-container)
Quindi creiamo una cartella sul nostro PC in cui metteremo alcuni file per interagire con AWS:
creiamo il file
trust-policy.json
(così come segue, non servono modifiche)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
Se è la prima volta che usiamo li IAM role, eseguiamo (le volte successive non serve):
~/.local/bin/aws/aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
Quindi creaiamo il file
role-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::vm-container"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::vm-container/*"
]
},
{
"Effect": "Allow",
"Action":[
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
Quindi:
~/.local/bin/aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
Infine creiamo il file
containers.json
[
{
"Description": "Debian 9 ScriptServer
",
"Format": "ova",
"UserBucket": {
"S3Bucket": "vm-container",
"S3Key": "Debian-9-script.ova"
}
}]
E lanciamo il comando di importazione:
~/.local/bin/aws ec2 import-image --description "Debian 9 ScriptServer" --license-type BYOL --disk-containers file://containers.json
Che ci restituirà un json di cui dobbiamo appuntarci il codice (qualcosa del tipo: "ImportTaskId": "import-ami-
fh7oq8qf")
Questo codice ci serve per controllare lo stato di avanzamento tramite il comando:
~/.local/bin/aws ec2 describe-import-image-tasks --import-task-ids import-ami-fh7oq8qf
Una volta terminato dobbiamo creare un'istanza nel modo classico dalla console di AWS, scegliendo l'immagine opportuna tre le proprie AMIs