AWS EC2からOCIへの移行手順を徹底解説

Multi-Cloud

初めに

AWS EC2インスタンスをOracle Cloud Infrastructure(OCI)へ移行したいと考えている方も少なくないでしょうか。

本記事では、EC2インスタンスを手動でOCIへ移行する方法を、ステップごとにわかりやすく解説します。S3へのエクスポートから、OCI Object Storageを経由したカスタム・イメージのインポート、そしてOCI上でのインスタンス作成までの一連の手順を詳しく紹介します。

マルチクラウド環境の構築を検討している方の参考になれば幸いです。

事前準備

  • EC2インスタンス(停止中の状態)(この例では、"Red Hat Linux 8"を使用)
  • S3バケット (インスタンス・イメージ格納用)
  • S3バケットにACLをアタッチ (方法はSTEP-1に記載)
  • rcloneのインストールとセットアップ (AWS/OCIへの接続済み)

STEP-1はAWS側で実施し、STEP-3STEP-4は、OCI側で実施します。
STEP-2の実施場所はクラウドでもオンプレミスでも問題ありません。この例では、"OCI Cloud Shell"を使用します。

Instance migration (AWS EC2 -> OCI)

1. EC2インスタンスをS3にエクスポート (AWS側)

インスタンスを停止してから、「AWS CLI」のコマンドを実行します。
この例では「AWS CloudShell」を使用します。 (「AWS CLI」は実装済み)

エクスポートタスクは AWS CLI でのみ実行できます(AWSコンソールからはできません)。

エクスポートのコマンド例

aws ec2 create-instance-export-task --description 'AWS-To-OCI' --instance-id <instance_id> --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=aws-2-oci

パラメータの意味
--description: 任意の内容を入力 (最大255文字)
--instance-id: EC2インスタンスのID
--target-environment: 指定可能な値は、"citrix"、"vmware"および"microsoft"(この例では"vmware"を指定)。
DiskImageFormat: イメージのフォーマット(OCIでサポートされている"vmdk"を指定)。
ContainerFormat: ディスクイメージとメタデータを組み合わせるために使用されるフォーマット("ova"を指定)。
S3Bucket: S3バケット(イメージ格納用)

以下のエラーが発生した場合

[cloudshell-user@ip-10-0-104-80 ~]$ aws ec2 create-instance-export-task --description 'AWS-To-OCI' --instance-id <instance_id> --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=aws-2-oci

An error occurred (InvalidParameter) when calling the CreateInstanceExportTask operation: Access denied to the bucket aws-2-oci
[cloudshell-user@ip-10-0-104-80 ~]$ 

対策:アクセス制御リスト(ACL)をS3バケットにアタッチする必要があります。

AWS S3 → Your_Bucket → Pemissions → Access control list (ACL) → Edit
ACL (Access control list)

以下のように読み取り/書き込みアクセスを許可します。
「Grantee」で、AWSドキュメントをご参照いただき、適切なリージョン固有の正規アカウントIDを指定してください。
Grantee

ACLをS3バケットにアタッチした後、正常にエクスポートできるようになりました。

[cloudshell-user@ip-10-0-86-145 ~]$ aws ec2 create-instance-export-task --description 'AWS-To-OCI' --instance-id <instance_id> --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=aws-2-oci
{
    "ExportTask": {
        "Description": "AWS-To-OCI",
        "ExportTaskId": "export-i-07e203dc1703757fd",
        "ExportToS3Task": {
            "ContainerFormat": "ova",
            "DiskImageFormat": "vmdk",
            "S3Bucket": "aws-2-oci",
            "S3Key": "export-i-07e203dc1703757fd.ova"
        },
        "InstanceExportDetails": {
            "InstanceId": "<instance_id>",
            "TargetEnvironment": "vmware"
        },
        "State": "active"
    }
}

AWSコンソールでの確認
エクスポートタスクの開始時に、ファイルvmimportexport_write_verificationが作成されます。
エクスポートタスクが完了すると、ファイル"<export_task_id>.ova"が作成されます。
エクスポート時間は、インスタンスのサイズによって異なります。このテストでは30分もかかりませんでした。
export_task_id.ova

2. AWS S3からOCIオブジェクト・ストレージにEC2のイメージをコピー

コピー方法は多数あります。例えば、WEBコンソールやCLI/SDKを使用してファイルをダウンロード・アップロードする方法があります。この例では、「OCI Cloud Shell」にインストールされるRcloneを使用します。Rcloneのインストールとセットアップについては、ここでは省略します。手順が必要な方は、以下のブログをご参照ください。(インストールとAWS/OCI両方への接続方法を含みます。)
RcloneでAWS S3からOCIオブジェクト・ストレージにデータをコピーする方法

バケット内のイメージファイルを確認

letian@cloudshell:~ (ap-tokyo-1)$ rclone listremotes
aws:
oci:
letian@cloudshell:~ (ap-tokyo-1)$ rclone ls aws:aws-2-oci
1253826560 export-i-07e203dc1703757fd.ova
        0 vmimportexport_write_verification
letian@cloudshell:~ (ap-tokyo-1)$ 

AWSからOCIにイメージをコピー

letian@cloudshell:~ (ap-tokyo-1)$ rclone --verbose copy aws:aws-2-oci/export-i-07e203dc1703757fd.ova oci:Target_Bucket
2021/10/11 03:52:18 INFO  : export-i-07e203dc1703757fd.ova: Copied (new)
2021/10/11 03:52:18 INFO  : 
Transferred:        1.168Gi / 1.168 GiByte, 100%, 67.478 MiByte/s, ETA 0s
Transferred:            1 / 1, 100%
Elapsed time:        18.2s

letian@cloudshell:~ (ap-tokyo-1)$ rclone ls oci:Target_Bucket
1253826560 export-i-07e203dc1703757fd.ova
letian@cloudshell:~ (ap-tokyo-1)$ 

OCIコンソールからイメージファイルを確認
Check image file from OCI console

ファイルサイズがの違いについて
イメージファイルのサイズは、OCIコンソールではGiB (1 GiB = 1024³ バイト)単位で表示されます。AWSコンソールで表示されるGB単位(1 GB = 1000³ バイト)よりも若干小さく表示されます。

3. OCIオブジェクト・ストレージからイメージをインポート (OCI側)

Menu → Compute → Custom Images → Import image
Click 'Import image' button

必要な情報を入力し、インポートを開始します。(「準仮想化モード(Paravirtualized mode)」を選択してください。)
Enter image information

「Work requests」画面で状態を確認できます。
Check work request (In progress)

インポート・タスクには約12分かかりました。
Check work request (Succeeded)

4. インポートされたイメージでOCIインスタンスを作成 (OCI側)

Menu → Compute → Instances → Create Instance → Change image
「Image source」で「Custom images」を選択し、インポートされたイメージファイルを指定します。
Select imported image

その他の必要な情報を入力し、作成を開始します。
Create compute instance

作成はすぐ完了します。
Instance is running

SSH経由で新しいインスタンスに接続する
ログインユーザーは移行元インスタンスと同じで、デフォルトは「ec2-user」です。秘密キーは、新しいインスタンスを作成する際に使用したもので、移行元インスタンスの秘密キーと異なっていても問題ありません。

[ec2-user@imported-instance-from-aws ~]$ pwd
/home/ec2-user
[ec2-user@imported-instance-from-aws ~]$ ll
total 4
-rw-rw-r--. 1 ec2-user ec2-user 4 Oct  8 07:17 this-is-EC2-instance.txt
[ec2-user@imported-instance-from-aws ~]$

エクスポート/インポートの制限事項
ここまで、インスタンス移行のタスクは完了です。エクスポートインポートにはいくつかの制限がありますので、ご注意ください。(リンクをクリックし、制限事項の詳細をご参照。)

以上

公式ドキュメント
【AWS】VM Import/Export を使用して VM としてインスタンスをエクスポート: 英語 日本語
【OCI】カスタムLinuxイメージのインポート 英語 日本語

タイトルとURLをコピーしました