ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
Amazon Web ServicesからOracle Cloud InfrastructureへのUbuntu仮想マシンの移行
イントロダクション
Amazon Web Services(AWS)からOracle Cloud Infrastructure(OCI)への移行は、多くの組織にとってますます頻繁な努力です。OCIは、アプリケーションをより速く、より安全に、より少なく実行できるようにする次世代のクラウドであるためです。
仮想マシン(VM)の移行は、多くの場合、このような取り組みの中核部分であり、顧客は、AWSからOCIへの移行方法に関する適切なガイダンスを探します。また、多くの組織にとって、Linuxはインフラストラクチャの大部分を占めています。したがって、このチュートリアルでは、最も広く使用されているLinuxディストリビューション(Ubuntu)を実行している仮想マシンをAWSからOCIに移行することに重点を置いています。
このチュートリアルでは、OCIへの仮想マシン移行の要件、およびUbuntu VMをAWSからOCIに準備および移行する方法に関するガイダンスを提供し、OCIで準仮想化モードで起動できるようにします。OCIでは、インスタンスをエミュレート・モードで起動することもできますが、準仮想化デバイスを使用する仮想マシンは、エミュレート・モードでの実行と比較してはるかに高速なパフォーマンスを提供し、ディスクI/Oのパフォーマンスは少なくとも6倍高速です。
全体的なプロセスは、AWSでのVMの準備、Amazon Simple Storage Service (S3)へのエクスポート、OCI Object Storageへの転送、OCIでのカスタム・イメージの作成、およびそこからインスタンスの起動で構成されます。Amazon S3とOCI Object Storageの間のイメージ転送は、オープン・ソース・ツールrcloneを使用して実行されます。小さいサイズのイメージを試す場合は、手動で行うことができます。ただし、rcloneを使用することをお勧めします。これは、イメージの転送がより迅速かつ簡単なプロセスになるためです。
OCIへのカスタム・イメージ・インポート・プロセスの詳細は、カスタムLinuxイメージのインポートを参照してください。
目的
-
OCIへの移行のために、AWSでUbuntu VMを準備します。
-
準備したVMをイメージとしてAmazon S3にエクスポートします。
-
イメージをOCIに転送し、そこからインスタンスを作成します。
前提条件
-
APIキーを作成できるか、すでに持っていることができ、S3およびEC2にアクセスできるAWSアカウントへのアクセス。
-
イメージ移行およびインスタンス起動のためのOCIテナンシおよびコンパートメントへのアクセス。
-
次を行うためのOracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシー:
- OCIオブジェクト・ストレージへのアクセスを許可します。
- OCIにVMをプロビジョニングします(rclone VMおよびカスタム・イメージ・ベースのVMの場合)。
- OCI APIキーの作成を許可します。
前提作業
-
pem
公開キーでプロビジョニングされたAWS VM。 -
AWS Ubuntu VMのボリュームは、そのブート・ボリュームの1つのみです。
-
AWSイメージはエクスポート可能です。このチュートリアルで使用されるAmazon Machine Image (AMI)は、2024年3月時点のUbuntu 22.04のAWSプラットフォーム・イメージです。
-
AWS Cloud Shellで実行されるAWSコマンドライン操作。AWS CLIツールを使用することもできます。
-
Amazon S3へのSSH接続でOCIにプロビジョニングされたOracle Linux VM。これは、Amazon S3とOCI Object Storage間でイメージを転送するためのrcloneをインストールおよび構成するVMです。
タスク1: データ転送インフラストラクチャの準備
このチュートリアルでは、次のデータ転送アーキテクチャを使用します。
-
rcloneによって実行されるAmazon S3とOCI Object Storageの間のインターネット経由でのイメージ転送。本番グレードのデプロイメントでは、Oracle Cloud Infrastructureのサイト間VPNまたはFastConnectを使用することをお薦めします。詳細は、AWSへのVPN接続およびFastConnectを参照してください。
-
Amazon S3およびOCI Object Storageへのセキュアなアクセスのために、ユーザー・プリンシパル認証を使用して構成されたクローン。
タスク1.1: Amazon S3およびOCIオブジェクト・ストレージ・バケットの準備
このタスクでは、次の場所にバケットを作成します:
- エクスポート先のイメージのAmazon S3。
- Amazon S3から転送されたVMディスク・イメージを格納するOCIオブジェクト・ストレージ。
次のプロパティを使用して、Amazon S3でバケットを作成します:
- 有効になっているアクセス制御リスト(ACL)。イメージをAmazon S3にエクスポートできるようにするには、カスタムACLをアタッチする必要があります。
- すべてのパブリック・アクセスをブロックします。
Amazon S3バケット権限で、次の図に示すように、作業しているAWSリージョンに一致する権限付与を使用して、ACLをバケットにアタッチします。権限受領者リージョン固有の正規アカウントIDを参照してください: VMインポート/エクスポートを使用したVMとしてのインスタンスのエクスポート。
標準ストレージ層でOCI Object Storageにバケットを作成して、このタスクを終了します。これは、後でAmazon S3からVMイメージを転送するバケットです。
タスク1.2: Rcloneのインストールおよび構成
このタスクでは、OCIで実行されているVMにrcloneをインストールします。小規模のVMを試し、Amazon S3とOCI Object Storageの2つのリモートでrcloneを構成する場合は、ローカル・マシンにrcloneをインストールできます。
-
OCIのOracle Linux VMにrcloneとSSHをインストールします。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
-
rcloneでリモート構成を実行します。これを行うには、rclone構成セッションを開始します。コマンド行で次のコマンドを実行します。
rclone config
-
Amazon S3リモート構成の場合は、次の情報を入力します。
- リモート名: リモート名を入力します。
- リモート・タイプ: S3タイプを選択します。
- プロバイダ: 「AWS」を選択します。
- access_key_id: 使用することを決定したAWSユーザーに関連付けられたアクセス・キーIDを入力します。
- secret_access_key: アクセス・キーIDに一致する秘密アクセス・キーを入力します。
- リージョン: 作業中のAWSリージョンを選択します。
- location_constraint: 作業中のAmazon Webリージョンに一致するロケーション制約を選択します。一部のリージョン(フランクフルトなど)では、これは空である可能性があります。
- ACL: 「private」を選択して、より制限された定型ACLを作成していることを確認します。詳細については、Canned ACLを参照してください。
-
OCI Object Storageへのrcloneアクセスの場合、このチュートリアルではOCIユーザーおよびAPI署名キーを使用します。かわりに、動的グループを使用することもできます。詳細は、インスタンスからのサービスのコールを参照してください。
OCI Object Storageリモートを構成する前に、次のことを行います:
-
OCI Object Storageで認証し、イメージ・データ転送を実行するためのrclone用のOCI API署名キーを作成します。API署名キーを作成し、キーをVMに格納するディレクトリを書き留めます。これは、OCI構成ファイルで指定する必要があるためです。API署名キーの生成方法を参照してください。
-
OCI構成ファイルを作成します。この構成ファイルには、OCI API署名キーが必要です。詳細は、SDKおよびCLIの構成ファイルを参照してください。
OCIプロバイダによるrcloneの認証オプションを理解するには、rcloneでのOCI Object Storageプロバイダのネイティブ・バックエンド・サポートの発表を参照してください。
-
-
OCI構成ファイルは、通常、
config
という名前のファイルとしてディレクトリに格納されます。~/.oci/
-
OCI API署名キーおよびOCI構成ファイルを作成したら、rcloneでOCIリモートを構成できます。次のコマンドを実行して、構成セッションを開始します。
rclone config
-
OCI Object Storageリモート構成に関する次の情報を入力します。
- リモート名:リモート名を入力します。
- タイプ:「Oracle Object Storage」を選択します。
- プロバイダ:動的グループを使用する場合は、
user_principal_auth
を選択します(OCIユーザーおよびAPI署名キーを使用するため)。instance_principal_auth
を選択します。 - Namespace:テナンシ・ネームスペースを入力します。
- コンパートメント: OCIバケット・コンパートメントOCIDを入力します。
- リージョン: OCIで作業しているリージョンを入力します。
- エンドポイント:空白のままにするか、
https://<namespace>.objectstorage.<region-code>.oci.customer-oci.com/n/<namespace>
という形式でエンドポイントを入力します。
-
次のコマンドを使用して、rcloneリモート構成ファイルを確認します。
cat ~/.config/rclone/rclone.conf
タスク2: ソースVMブート・ボリュームの準備
タスク2.1: AWS VMブート・ボリュームの必須スナップショットの実行
AWS VMブート・ボリュームのスナップショットを実行します。これは、ブート・ボリューム構成アクティビティを開始する前に必須です。
タスク2.2: シリアル・コンソールの有効化
シリアルコンソール接続を使用すると、ユーザーは VMのトラブルシューティングを行い、システム構成ファイルの編集やパスワードのリセットなどのアクティビティーを実行できます。通常、シリアルコンソール用に VMを準備するには、GRUBブートローダーファイルを構成する必要があります。このファイルは/etc/default/grub
にあります。AWS Ubuntuプラットフォーム・イメージでは、/etc/default/grub
ファイルだけでなく、/etc/default/grub.d/50-cloudimg-settings.cfg
ファイルにも構成が必要です。この後者のファイルは、クラウド・イメージ・ビルド・プロセスによって変更され、etc/default/grub
構成をオーバーライドします。
最も重要なGRUB構成パラメータは次のとおりです。
- GRUB_TIMEOUT_STYLE: Make sure it is commented if its value is "hidden"; alternatively, change it to "menu".
- GRUB_TIMEOUT: Make sure it is higher than 0 to allow boot mode selection without skipping directly to the default option. Specify this value in both files.
- GRUB_CMDLINE_LINUX: Make sure "console=tty1 console=ttyS0, 115200" is appended to it.
- GRUB_TERMINAL: Make sure its value is "serial console".
- GRUB_SERIAL_COMMAND: Make sure its value is "serial -- unit=0 --speed=115200".
-
/etc/default/grub.d/50-cloudimg-settings.cfg
を開きます。sudo vi /etc/default/grub.d/50-cloudimg-settings.cfg
次の図に示すようなファイルになるようにファイルを編集します。
-
/etc/default/grub
を開きます。sudo vi /etc/default/grub
次の図に示すようなファイルになるようにファイルを編集します。
-
ファイルの編集後、次のコマンドを実行して、GRUBブート・ローダーが適切に更新されていることを確認します。
sudo update-grub
タスク2.3: 準仮想化ドライバの確認
準仮想化モードで起動できるようにVMをOCIにインポートするには、準仮想化VirtIOドライバがイメージに存在する必要があります。このタスクでは、カーネルとinitramfs一時ファイルシステムの両方をチェックして、ドライバの存在を確認します。カーネル・バージョン3.4以降を実行しているLinuxベースのオペレーティング・システムでは、準仮想化ドライバがサポートされるため、多くの場合、存在していることを確認するだけで済みます。
必要なVirtIOドライバの最小セットには、pci
およびscsi
が含まれます。これらのドライバは、カーネルまたはinitramfsに存在する必要があります。
-
次のコマンドを使用して、AWS VMのカーネルを確認します。
sudo grep -i virtio /boot/config-$(uname -r)
ノート:
pci
VirtIOドライバはカーネルに存在します。 -
次のコマンドを使用して、AWS VMのカーネルを確認します。
sudo lsinitramfs /boot/initrd.img-$(uname -r) | grep virtio
ノート:
scsi
VirtIOドライバはinitramfsに存在します。 -
VMのブート・ボリュームにドライバがない場合は、
dracut
を使用してinitramfsを再構築する必要があります。sudo dracut -v -f --add-drivers “virtio virtio_pci virtio_scsi” /boot/initramfs-$(uname -r).img $(uname -r)
タスク2.4: ネットワーク設定の構成
ネットワーク構成については、次を確認してください。
- VMはDHCPを使用しています。
- ネットワーク構成内のMACアドレスハードコードされた参照はすべて削除されます。
Linuxでネットワーク構成を実行するには、いくつかの方法があります。Canonicalは、このタスクを簡素化する方法として Netplanユーティリティーを開発しました。このチュートリアルではNetplanを使用しますが、ネットワーク構成ファイルが希望の場合は、変更することもできます。
-
AWS Ubuntuプラットフォーム・イメージは、Netplan構成を
/etc/netplan/50-cloud-init.yaml
ファイルに指定します。sudo権限でファイルを開き、編集できるようにします。sudo vi /etc/netplan/50-cloud-init.yaml
次の図に示すように、構成ファイルが表示されます。
-
ファイルを編集し、macアドレスと、macアドレスで一致するインタフェース名を削除します。構成は、次の図のようになります。
-
Netplan applyコマンドを実行して、ネットワーク構成を更新および終了します。
sudo netplan apply
タスク3: 仮想マシン・イメージのAmazon S3へのエクスポート
このタスクでは、AWSコマンドライン・インタフェース(CLI)を使用する必要があります。このチュートリアルでは、AWS CLI構成タスクをスキップするため、AWS CloudShellを使用します。
-
仮想マシンを停止します。AWS CloudShellを開き、次のコマンドを実行してイメージをエクスポートします。
aws ec2 create-instance-export-task --instance-id <instance-id> --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=<bucket name>
-
次の情報を入力します
- ディスク・イメージ形式: OCIでサポートされている唯一のAWSエクスポート形式であるため、VMDKと入力します。
- コンテナ形式: OVAと入力して、ディスク・イメージをVMに関するメタデータと結合します。または、このパラメータをエクスポートできます。
- ターゲット環境: OCIでサポートされている唯一のターゲット環境であるため、vmwareと入力します。
-
AWS CloudShellで次のコマンドを実行して、エクスポート・タスクの状態を監視できます。
aws ec2 describe-export-tasks --export-task-ids <export task id>s
最初にタスクを起動すると、「アクティブ」状態になります。完了すると、「完了」状態になります。
タスク4: OCIオブジェクト・ストレージへのイメージの転送
タスク1.2でrcloneが構成されたOCI仮想マシンにSSH接続します。Amazon S3バケットからOCI Object Storageバケットにエクスポートされたイメージのコピーを実行します。
rclone copy <aws-remote>:<bucket>/<imagefile> <oci-remote>:<bucket> -vv
タスク5: OCIでのカスタム・イメージの作成およびインスタンスの起動
-
OCIコンソールで、コンピュート・サービスの「カスタム・イメージ」に移動し、「イメージのインポート」を選択します。
-
次の情報を入力します
- コンパートメント:カスタム・イメージを作成するコンパートメントを選択します。
- 名前:カスタム・イメージの名前を入力します。
- オペレーティング・システム:「Ubuntu」を選択します。
- ソース: オブジェクト・ストレージ・バケットからインポートします。タスク1.1で構成したバケットを選択します。
- オブジェクト名: Amazon S3から転送したイメージを選択します。
- 起動モード:「準仮想化」モードを選択します。
-
「イメージのインポート」をクリックして、イメージのインポートを開始します。
-
イメージが作成されると、そこからインスタンスを起動する準備が整います。カスタム・イメージの詳細ページで、「インスタンスの作成」を選択し、次の情報を入力します。
- 名前:インスタンスの名前を入力します。
- コンパートメント:インスタンスを起動するコンパートメントを選択します。
- 可用性ドメイン
- VCNおよびサブネット。このチュートリアルでは、パブリック・サブネットを使用してVPN接続をスキップできます。
- SSHキー: 2つのオプションがあります: 新しいSSHキーを生成するか、AWSで使用したものと同じキー・セットを使用します。同じキー・セットを引き続き使用する場合は、AWSでソースVMに使用したものと同じ公開キーをアップロードします。AWS公開キーが
.pem
キー形式の場合、それを.pem.pub
に変更してOCIインスタンスにアップロードします。これにより、同じ秘密キーを使用してVMにSSHで接続し続けることができます。
-
仮想マシンを起動します。プロビジョニングが終了したら、それに接続できます。接続するユーザーは opcではなく ubuntuであることに注意してください。
ssh -i pathToKey/keyfile ubuntu@<publicIp>
関連リンク
承認
- 著者 - Ricardo Malhado (プリンシパル・クラウド・ソリューション・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Migrate an Ubuntu Virtual Machine from Amazon Web Services to Oracle Cloud Infrastructure
F95785-01
March 2024