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

Cloud 6-10-2023, 23:19 sobir 254 0


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

Посмотреть статус задания по экспорту EC2 инстанса можно командой:
aws ec2 describe-export-tasks --export-task-ids export-i-[printed with previous step] --region ap-east-1 
Похожие новости
Мигрируем виртуальную машину из VirtualBox в облако AWS

Вкратце рассмотрим процесс миграции локальной виртуальной машины с операционной системой GNU/Linux из...

Подробнее
Предоставляем ограниченный доступ к бакету AWS S3 и MinIO

Управление доступом к хранилищу S3 в Amazon Web Services (AWS) и MinIO....

Подробнее
Разворачиваем NGINX в Docker

Создание кастомного образа nginx из Dockerfile....

Подробнее
Разворачиваем LEMP-стэк на контейнерах Docker

Контейнеризируем сервисы LEMP с помощью docker-compose....

Подробнее
Настройка NFS хранилища в CentOS 8 / RHEL 8

Создание простого сетевого хранилища данных NFS....

Подробнее
Установка и настройка Ansible в Ubuntu

Учимся использовать Ansible на сервере Ubuntu....

Подробнее
Комментарии (0)
Новые комментарии
komronu8 сентября 2022 18:23

Салом, можно ещё создать файл в /etc/nginx/proxy_params, a потом добавить туда

img
К комментарию
sobir26 августа 2022 10:43

Можно ещё так: 1. Создаем отдельную сеть для наших контейнеров docker network

img
К комментарию
komronu22 августа 2022 15:12

Спасибо за отзыв, написал отдельную статью по установке и настройке Ansible

img
К комментарию
sobir19 августа 2022 18:00

Думаю в статье необходимо также описать процесс установки Ansible.

img
К комментарию
sobir17 октября 2021 11:40

Принудительное обновление сертификата: certbot certonly --force-renew -d

img
К комментарию
sobir3 июля 2021 14:19

Можно, но я решил описать процесс копирования ключей более подробно.

img
К комментарию
Все комментарии
Какой дистрибутив Linux вы часто используете?
Календарь
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930 
Подпишись на канал