В этом руководстве мы рассмотрим процесс экспорта образа AMI виртуальной машины EC2 из облака AWS в хранилище S3.
Подготовка
Для выполнения этой задачи вам потребуется:
- Готовый образ виртуальной машины AMI.
- Бакет S3.
- AWS CLI.
- Роль `vmimport`.
Полезные статьи:
Обратите внимание, что в данной статье мы не будем рассматривать процесс создания образа ВМ AMI, бакета S3 и настройки консоли управления AWS CLI.
1. Создание роли vmimport
Создайте файл trust-policy.json на своем компьютере и добавьте в него следующее:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
Используйте следующую команду, чтобы создать роль с именем vmimport и предоставить доступ к импорту/экспорту виртуальной машины:
aws iam create-role --role-name vmimport --assume-role-policy-document "file://C:\import\trust-policy.json"
Создайте файл role-policy.json на своем компьютере и добавьте в него следующее:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket",
"arn:aws:s3:::your-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::your-bucket",
"arn:aws:s3:::your-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
Замените "your-bucket" на имя вашего бакета Amazon S3.
Используйте следующую команду, чтобы привязать политику к роли vmimport:
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://C:\import\role-policy.json"
2. Экспорт ВМ
Запустите задание по экспорту образа AMI в хранилище S3 с помощью следующей команды:
aws ec2 export-image --image-id ami-[put_your_id] --region ap-east-1 --disk-image-format VMDK --s3-export-location S3Bucket=your-bucket,S3Prefix=exports/
Вы можете проверить статус задания по экспорту образа с помощью следующей команды:
aws ec2 describe-export-image-tasks --export-image-task-ids export-ami-[printed with previous step] --region ap-east-1
ДОПОЛНЕНИЕ к статье
Если необходимо экспортировать запущенный EC2 инстанс:
Запустите задание по экспорту EC2 инстанса в формате OVA:
aws ec2 create-instance-export-task --instance-id i-[put_your_id] --target-environment vmware --export-to-s3-task S3Bucket=your-bucket,S3Prefix=exports,ContainerFormat=ova,DiskImageFormat=vmdk --region ap-east-1
Далее можно получить ошибку следующего содержания:
An error occurred (AuthFailure) when calling the CreateInstanceExportTask operation: Bucket must be owned by the same S3 account and READ_ACL and WRITE permissions are required on the destination bucket. Please refer to the API documentation for details.
Для её решения нужно предоставить права доступа (ACL) в S3 согласно вашему региону AWS, список Grantee можно взять отсюда: https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html
В моём случае, я выбрал регион ap-east-1:
Посмотреть статус задания по экспорту EC2 инстанса можно командой:
aws ec2 describe-export-tasks --export-task-ids export-i-[printed with previous step] --region ap-east-1