В инструкции рассказываем, как перенести виртуальный сервер Amazon EC2 из AWS в Servercore и настроить его.
Подготовка к работе
Рассмотрим процесс перемещения инстанса Amazon EC2 на Ubuntu 22.04 с сетевым диском размером 8 ГБ и публичным IPv4-адресом.
1. Убедитесь, что на инстансе AWS установлен и известен пароль от root. Если вы не сможете подключиться к инстансу по SSH-ключу, можно восстановить доступ в панели управления.
2. Установите на инстансе cloud-init, если он не установлен:
apt update apt install cloud-init
Создание образа инстанса
Откройте панель управления, выберите в списке инстансов нужную запись и создайте ее образ. Для этого нажмите Actions и в меню выберите Image and templates ⟶ Create Image:
При создании образа рекомендуем не использовать опцию No reboot — попытка создать образ без остановки инстанса может привести к неконсистентности данных и другим сложностям. Обратите внимание, что инстанс будет перезагружен в процессе создания образа:
Созданный образ будет размещен в разделе Amazon Machine Images (AMIs). Дождитесь окончания процесса — образ перейдет в статус Available.
Создание S3-бакета
Создайте контейнер в хранилище Amazon S3 — в него мы поместим образ инстанса.
При создании контейнера выберите регион размещения инстанса и его образа. Остальные настройки можно оставить по умолчанию:
Управление уровнем доступа через AWS IAM
Для последующей работы с образом нужно настроить доступ к ресурсам через AWS IAM.
1. Откройте сервис IAM.
2. Создайте ключ Access keys для подключения AWS CLI. Для этого перейдите в раздел Users ⟶ Ваш пользователь ⟶ Security credentials и нажмите Create Access keys. Обязательно сохраните файл .csv или скопируйте Secret access key. Если он будет утерян, придется удалить текущий ключ и создать новый.
Создание сервисной роли
1. Откройте сервис IAM и выберите раздел с ролями Roles.
2. Нажмите Create role и выберите AWS service в Trusted entity type, затем — EC2 в качестве Use case.
3. Пропустите следующий шаг и задайте имя для роли. Остальные настройки можно оставить без изменения.
4. Теперь откройте созданную политику и перейдите в раздел Permissions, а затем нажмите Create inline policy.
5. В редакторе JSON добавьте такой код:
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource":[ "arn:aws:s3:::<your_s3bucket>" ] }, { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::<your_s3bucket>"/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }
6. Убедитесь, что указали правильное имя S3-бакета, в котором будет находиться ваш AMI и затем нажмите Create Policy.
7. Создайте политику доступа к ресурсам AWS. Откройте Policies ⟶ Create Policy. А далее вставьте JSON-файл vmimport.json с таким содержимым:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::mys3bucket","arn:aws:s3:::mys3bucket/*"] }, { "Effect": "Allow", "Action": [ "ec2:CancelConversionTask", "ec2:CancelExportTask", "ec2:CreateImage", "ec2:CreateInstanceExportTask", "ec2:CreateTags", "ec2:DescribeConversionTasks", "ec2:DescribeExportTasks", "ec2:DescribeExportImageTasks", "ec2:DescribeImages", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeSnapshots", "ec2:DescribeTags", "ec2:ExportImage", "ec2:ImportInstance", "ec2:ImportVolume", "ec2:StartInstances", "ec2:StopInstances", "ec2:TerminateInstances", "ec2:ImportImage", "ec2:ImportSnapshot", "ec2:DescribeImportImageTasks", "ec2:DescribeImportSnapshotTasks", "ec2:CancelImportTask" ], "Resource": "*" } ] }
В файле замените <your_s3bucket> на имя вашего S3 Bucket.
8. В качестве Name* укажите vmimport, затем нажмите Create policy.
9. Следующим шагом нужно «примапить» политику к роли. Откройте созданную роль и перейдите в Entities attached. Далее в Attachвыберите созданную роль.
10. Добавьте Policy пользователю. Откройте Users ⟶ Ваш пользователь ⟶ Permissions и нажмите Add permissions.
11. Нажмите Attach policies directly и выберите нужную policy. Затем нажмите Add permissions.
Копирование образа инстанса из EC2 AMI в S3-бакет
Панель управления AWS не позволяет просто скачать образ инстанса. Но консольный клиент AWS CLI дает возможность экспортировать образ в хранилище S3. Оттуда его можно загрузить, например, на локальный ПК.
1. Установите AWS CLI на локальный ПК. Мы рассматриваем установку для Linux x86 64-bit, инструкция для Windows и macOS — в официальной инструкции.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
2. Проверьте корректность установки и настройте AWS CLI:
aws --version aws-cli/2.15.36 Python/3.11.8 Linux/6.5.0-26-generic exe/x86_64.ubuntu.22 prompt/off aws configure AWS Access Key ID [None]: # ваш Key ID AWS Secret Access Key [None]: # ваш Secret Access Key Default region name [None]: # регион размещения инстанса Default output format [None]: table # формат возвращаемых в консоль данных
Пример команды для отображения инстансов AWS:
aws ec2 describe-instances
Конвертируйте образ и скопируйте его в S3-бакет:
aws ec2 export-image \ - image-id ami-1234567890abcdef0 \ - disk-image-format RAW \ - s3-export-location S3Bucket=my-export-bucket,S3Prefix=exports/
Замените ami-1234567890abcdef0 на имя вашего образа. Обратите внимание, что — disk-image-format может быть VMDK, RAW или VHD. Мы рекомендуем выбрать RAW.
Узнайте статус выполнения задачи:
aws ec2 describe-export-image-tasks --export-image-task-id export-ami-05eb5524acd01529f
Создание облачного сервера Servercore
Из экспортированного образа AWS можно создать облачный сервер в Servercore.
Загрузка образа
Для начала загрузите образ в облачную платформу. Для этого откройте панель управления Servercore, перейдите в раздел Cloud platform ⟶ Images. Создайте новый образ (Image).
Откройте раздел Images и нажмите Create image. В качестве источника образа выберите File и загрузите экспортированный образ из AWS.
Создание облачного сервера
1. Откройте раздел Servers, нажмите Create server, предварительно выбрав локацию размещения.
2. Выберите загруженный образ в разделе Choose another source ⟶ My images ⟶ <ваш образ>. При этом обратите внимание, что доступны только те источники, которые находятся в выбранной зоне доступности.
3. Добавьте публичный IP-адрес (Public или Private + one public IP) на этапе выбора сети. А также добавьте SSH-ключ для доступа к облачному серверу.
4. После настройки нажмите Create.
Настройка облачного сервера Servercore
Если автоматически сервер не настроился, это можно сделать вручную.
1. Подключитесь к серверу по SSH, используя публичный IP-адрес и пароль из панели управления.
2. Откройте файл /etc/hosts, удалите все записи, относящиеся к AWS, и добавьте новое имя хоста:
nano /etc/hosts 127.0.0.1 localhost hostname
3. Откройте файл /etc/resolv.conf и добавьте DNS-серверы:
nano /etc/resolv.conf nameserver 213.148.0.221 nameserver 213.148.0.222
4. Откройте файл со списком репозиториев и удалите все, относящиеся к AWS. Вместо них добавьте репозитории Servercore:
sudo nano /etc/apt/sources.list
deb http://kz.mirror.servercore.com/ubuntu jammy main restricted deb-src http://kz.mirror.servercore.com/ubuntu jammy main restricted deb http://kz.mirror.servercore.com/ubuntu jammy-updates main restricted deb-src http://kz.mirror.servercore.com/ubuntu jammy-updates main restricted deb http://kz.mirror.servercore.com/ubuntu jammy universe deb-src http://kz.mirror.servercore.com/ubuntu jammy universe deb http://kz.mirror.servercore.com/ubuntu jammy-updates universe deb-src http://kz.mirror.servercore.com/ubuntu jammy-updates universe deb http://kz.mirror.servercore.com/ubuntu jammy multiverse deb-src http://kz.mirror.servercore.com/ubuntu jammy multiverse deb http://kz.mirror.servercore.com/ubuntu jammy-updates multiverse deb-src http://kz.mirror.servercore.com/ubuntu jammy-updates multiverse deb http://kz.mirror.servercore.com/ubuntu jammy-backports main restricted universe multiverse deb-src http://kz.mirror.servercore.com/ubuntu jammy-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu jammy-security main restricted deb-src http://security.ubuntu.com/ubuntu jammy-security main restricted deb http://security.ubuntu.com/ubuntu jammy-security universe deb-src http://security.ubuntu.com/ubuntu jammy-security universe deb http://security.ubuntu.com/ubuntu jammy-security multiverse deb-src http://security.ubuntu.com/ubuntu jammy-security multiverse deb [arch=all signed-by=/usr/share/keyrings/openstack.gpg] https://kz.mirror.servercore.com/3rd-party/cloud-init-deb/jammy/ jammy main
5. Последним этапом нужно перезагрузить сервер:
sudo reboot
Готово — все изменения вошли в силу, с сервером можно работать.
Заключение
Мы рассмотрели, как мигрировать из AWS в Servercore: создали образ инстанса AWS, перенесли его в S3-бакет, затем создали из него облачный сервер. Если у вас остались вопросы, пишите в комментариях!