5
1

AWS EC2インスタンスをOracle Cloudに移行

Last updated at Posted at 2021-10-25

本ブログは、オラクル・クラウドの個人ブログの1つです。

初めに

利用中のクラウドから、他クラウドにリソースを移行したい時、インスタンスの移行は重要なタスクになります。AWS EC2インスタンスをOCI (Oracle Cloud Infrastructure) に手動で移行する方法を紹介します。少しお役に立てれば幸いです。

事前準備
EC2インスタンス(停止中の状態)(この例は、"Red Hat Linux 8"を利用する。)
S3バケット (インスタンス・イメージ格納用)
S3バケットにACLをアタッチ (方法はSTEP-1にある。)
rcloneのインストールとセットアップ (AWS/OCIに接続済)

ステップ
1. EC2インスタンスをS3にエクスポートする (AWS側)
2. AWS S3からOCIオブジェクト・ストレージにEC2のイメージをコピー
3. OCIオブジェクト・ストレージからイメージをインポートする (OCI側)
4. インポートされたイメージでOCIインスタンスを作成 (OCI側)

STEP-1は、AWS側で実施します。STEP-3とSTEP-4は、OCI側で実施します。
STEP-2の実施場所は、クラウド/On-Pか、どこでもOKです。(この例は、"OCI Cloud Shell"で実施します。)

image.png

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
image.png
以下のように読み取り/書き込みアクセスを許可します。
「Grantee」で、AWSドキュメントをご参照いただき、適切なリージョン固有の正規アカウントIDを指定します。
image.png
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分もかかりませんでした。
image.png

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

コピー方法はたくさんあります。例えば、WEBコンソールか、CLI/SDKでファイルをダウンロード・アップロードします。この例では、「OCI Cloud Shell」にインストールされるrcloneを利用します。rlconeのインストールとセットアップは、ここで省略します。手順がほしい方は、以下のブログをご参照ください。(インストールとAWS/CLIへの接続方法を含みます。)

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

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

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

liu_wei@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

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

OCIコンソールからイメージファイルを確認
image.png

ファイルサイズがなぜ違うと思ったら
イメージファイルのサイズは、OCIコンソールでGiB (1 GiB = 1024³ バイト)単位で表示されます。AWSコンソールで表示されるGB単位(1 GB = 1000³ バイト)より少し小さいです。

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

Menu -> Compute -> Custom Images -> Import image
image.png
必要な情報を入力し、インポートを開始します。(「準仮想化モード(Paravirtualized mode)」を選択します。)

「Work requests」画面で状態を確認できます。
image.png
インポート・タスクには12分近くかかりました。
image.png

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

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

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

作成はすぐ完了します。
image.png

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 ~]$

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

以上


関連記事
オラクル・クラウドの個人ブログ一覧
AzureからWindows VMをOracle Cloudに移行
RcloneでAWS S3からOCIオブジェクト・ストレージにデータをコピー
OCI Cloud Shellにrcloneをインストールする
テナンシ間 OCI カスタム・イメージの移行


オフィシャル・ドキュメント
AWS - VM Import/Export を使用して VM としてインスタンスをエクスポート
OCI - カスタムLinuxイメージのインポート

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1