DataLife Engine / Экспорт образа AMI виртуальной машины из AWS в хранилище S3

Экспорт образа AMI виртуальной машины из AWS в хранилище S3


В этом руководстве мы рассмотрим процесс экспорта образа AMI виртуальной машины EC2 из облака AWS в хранилище S3.

Подготовка

Для выполнения этой задачи вам потребуется:


Полезные статьи:


Обратите внимание, что в данной статье мы не будем рассматривать процесс создания образа ВМ 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:
Экспорт образа AMI виртуальной машины из AWS в хранилище S3

Посмотреть статус задания по экспорту EC2 инстанса можно командой:
aws ec2 describe-export-tasks --export-task-ids export-i-[printed with previous step] --region ap-east-1 
6-10-2023, 23:19
Вернуться назад