株式会社クレアヴォイアンスでは、一部のサービスをXCP-ng環境で運用していましたが、運用上の理由からEC2へ移行することになりました。
移行にあたり新規構築は避け、既存のVMをそのままAWSに持ち込んでAMI化する方法を採用しました。
必要なもの
AWS CLIのインストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
以下のアクセス許可を与えたIAMユーザー
https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/required-permissions.html
qemu-img
お使いのマシンでqemu-imgコマンドが通るか確認してください。
通らなければインストールしましょう。
条件
移行したubuntsのバージョンは以下の通りです。
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble
作業する①VMのエクスポート
Xen Orchstraを使ってVMをovaファイルとしてエクスポートします。
エクスポートされたovaファイルをtarコマンドで解凍してください。
tar -xvf vm.ova
拡張子vmdkのファイルが展開されると思います。これをqemu-imgを使ってvhdに変換します。
なぜか自分の環境だと一度rawファイルにしたらうまくいったのでその通りに記載します。
# 一旦rawに
qemu-img convert -p -O raw vm.vmdk vm.raw
# そしたらvhd
qemu-img convert -p -O vpc vm.raw vm.vhd
作業する②vhdのアップロード
S3にアップロード用のバケットを作成します。vm-import2025とする。
できたらAWS S3にアップロードします。
aws s3 cp vm.vhd s3://vm-import2025/
containers.jsonの作成とイメージのインポート
作業ディレクトリにcontainers.jsonを作成します。
[
{
"Description": "Ubuntu 24.04.2 LTS from VMDK",
"Format": "vhd",
"UserBucket": {
"S3Bucket": "vm-import2025",
"S3Key": "vm.vhd"
}
}
]
これが出来ればAMIイメージの作成です。
aws ec2 import-image \
--description "Ubuntu 24.04.2 LTS from XCP-ng vhd" \
--disk-containers file://containers.json
作業③待つ
実行するとimport-task-ids
が表示されるのでタスクのステータスを確認しましょう。
aws ec2 describe-import-image-tasks --import-task-ids import-ami-<表示されたID>
結構時間かかる
完了するとAMIの一覧に追加されます!これで使用可能です。
お疲れさまでした。