本ブログは、オラクル・クラウドの個人ブログの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"で実施します。)
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
以下のように読み取り/書き込みアクセスを許可します。
「Grantee」で、AWSドキュメントをご参照いただき、適切なリージョン固有の正規アカウントIDを指定します。
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分もかかりませんでした。
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コンソールでGiB (1 GiB = 1024³ バイト)単位で表示されます。AWSコンソールで表示されるGB単位(1 GB = 1000³ バイト)より少し小さいです。
3. OCIオブジェクト・ストレージからイメージをインポートする (OCI側)
Menu -> Compute -> Custom Images -> Import image
必要な情報を入力し、インポートを開始します。(「準仮想化モード(Paravirtualized mode)」を選択します。)
「Work requests」画面で状態を確認できます。
インポート・タスクには12分近くかかりました。
4. インポートされたイメージでOCIインスタンスを作成 (OCI側)
Menu -> Compute -> Instances -> Create Instance -> Change image
「Image source」で、「Custom images」を選択してから、インポートされたイメージファイルを指定します。
その他の必要な情報を入力し、作成を開始します。
作成はすぐ完了します。
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イメージのインポート