ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
Red Hat Enterprise Linux仮想マシンのAmazon Web ServicesからOracle Cloud Infrastructureへの移行
イントロダクション
Amazon Web Services(AWS)からOracle Cloud Infrastructure(OCI)への移行は、多くの組織にとってますます頻繁な努力です。OCIは、アプリケーションをより速く、より安全に、より少なく実行できるようにする次世代のクラウドであるためです。
仮想マシン(VM)の移行は、多くの場合、このような取り組みの中核部分であり、お客様は、AWSからOCIへの移行方法に関する適切なガイダンスを探します。また、多くの組織にとって、Linuxはインフラストラクチャの大部分を占めています。したがって、このチュートリアルでは、世界で最も広く使用されているLinuxディストリビューション(Red Hat Enterprise Linux)の1つをAWSからOCIに移行する仮想マシンに焦点を当てています。
このチュートリアルでは、OCIへの仮想マシン移行の要件、およびRed Hat Enterprise Linux VMをAWSからOCIに準備および移行する方法に関するガイダンスを提供し、OCIで準仮想化モードで起動できるようにします。OCIでは、インスタンスをエミュレート・モードで起動することもできますが、準仮想化デバイスを使用する仮想マシンは、エミュレート・モードでの実行と比較してはるかに高速なパフォーマンスを提供し、ディスクI/Oのパフォーマンスは少なくとも6倍高速です。
全体的なプロセスは、AWSでのVMの準備、Amazon Simple Storage Service (Amazon S3)へのエクスポート、OCI Object Storageへの転送、OCIでのカスタム・イメージの作成、およびそこからインスタンスの起動で構成されます。Amazon S3とOCI Object Storageの間のイメージ転送は、オープン・ソース・ツールrcloneを使用して実行されます。小さいサイズのイメージを試す場合は、手動で行うことができます。ただし、rcloneを使用することをお勧めします。これは、イメージの転送がより迅速かつ簡単なプロセスになるためです。
目的
-
OCIへの移行のために、AWSでRed Hat Enterprise Linux VMを準備します。
-
準備したVMをイメージとしてAmazon S3にエクスポートします。
-
イメージをOCIに転送し、そこからインスタンスを作成します。
前提条件
-
APIキーを作成できるか、すでに持っていることができ、Amazon S3およびAmazon Elastic Compute Cloud (Amazon EC2)にアクセスできるAWSアカウントへのアクセス。
-
イメージ移行およびインスタンス起動のためのOCIテナンシおよびコンパートメントへのアクセス。
-
次を行うためのOracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシー:
-
OCIオブジェクト・ストレージへのアクセスを許可します。
-
OCIにVMをプロビジョニングします(rclone VMおよびカスタム・イメージ・ベースのVMの場合)。
-
OCI APIキーの作成を許可します。
-
前提作業
-
pem
公開キーでプロビジョニングされたAWS VM。 -
AWS RHEL VMのボリュームは1つのみです: ブート・ボリューム。
-
AWSイメージはエクスポート可能です。このチュートリアルで使用されるAmazon Machine Image (AMI)は、2024年3月時点のRHEL
9.3.0
のAWSプラットフォーム・イメージです。 -
AWSによってデフォルトで提供されるユーザーとのSSH接続:
ec2-user
。 -
AWS CloudShellで実行されるAWSコマンドライン操作。AWS CLIツールを使用することもできます。
-
OCIにプロビジョニングされたOracle Linux VMと、Amazon S3へのSSH接続。これは、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バケット・コンパートメントのOracle Cloud Identifier (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
にあります。
最も重要な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
を開きます。sudo vi /etc/default/grub
次の図に示すようなファイルになるようにファイルを編集します。
-
ファイルの編集後、次のコマンドを実行して、GRUBブート・ローダーが適切に更新されていることを確認します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
タスク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 lsinitrd /boot/initramfs-$(uname -r).img | 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でネットワーク構成を実行するには、いくつかの方法があります。具体的には、RHELでは、/etc/sysconfig/network-scripts/ifcfg-eth0
のネットワーク構成ファイルを編集するか、NetworkManagerを使用して、イーサネット接続構成を実行できます。このチュートリアルでは、後者を使用して必要なネットワーク構成を実行します。詳細は、Configuring an Ethernet connectionを参照してください。
-
NetworkManagerコマンドライン・ツール(
nmcli
)を実行して、VMのネットワーク構成のサマリーを確認します。 -
VMで使用可能な接続をリストするには、次のコマンドを実行します。
nmcli connection show
接続のリストが表示されます。このチュートリアルで使用するVMには、次の接続があります。
-
Dynamic Host Configuration Protocol (DHCP)を使用して、
eth0
に関連付けられたイーサネット接続を確認します。nmcli connection show <connection UUID>
ipv4.method
パラメータが見つかるまでスクロールします。値がauto
になっているはずです。 -
インタフェース
eth0
に関連付けられた接続を編集します。次のコマンドを使用して、インタフェース構成からMACアドレスを削除します。sudo nmcli connection modify <connection UUID> 802-3-ethernet.mac-address ''
-
次のコマンドを使用して、これらの変更を適用します。
sudo nmcli con up <connection UUID>
-
さらに、
/etc/udev/rules
ディレクトリをチェックして、MACアドレスのハードコードされたルールを含むudevルール・ファイルがあるかどうかを確認し、それらを削除します。このチュートリアルで使用するAWSイメージには、このようなファイル70-persistent-net.rules
があります。このファイルを削除するには、次のコマンドを実行します。sudo rm /etc/udev/rules.d/70-persistent-net.rules
ネットワーク構成が完了しました。確認するには、ファイル/etc/sysconfig/network-scripts/ifcfg-eth0
を確認します。
タスク3: 仮想マシン・イメージのAmazon S3へのエクスポート
このタスクでは、AWS CLIを使用する必要があります。このチュートリアルでは、AWS CLI構成タスクをスキップするため、AWS CloudShellを使用します。
-
VMを停止します。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 VMにSSH接続します。エクスポートされたイメージのコピーをAWS S3バケットからOCI Object Storageバケットにコピーします。
rclone copy <aws-remote>:<bucket>/<imagefile> <oci-remote>:<bucket> -vv
タスク5: OCIでのカスタム・イメージの作成およびインスタンスの起動
-
OCIコンソールで、コンピュート・サービスの「カスタム・イメージ」に移動し、「イメージのインポート」を選択します
-
次の情報を入力します
- コンパートメント:カスタム・イメージを作成するコンパートメントを選択します。
- 名前:カスタム・イメージの名前を入力します。
- オペレーティング・システム:「RHEL」を選択します。
- ソース: オブジェクト・ストレージ・バケットからインポートします。タスク1.1で構成したバケットを選択します。
- オブジェクト名: Amazon S3から転送したイメージを選択します。
- 起動モード:「準仮想化」モードを選択します。
-
「イメージのインポート」をクリックして、イメージのインポートを開始します。
-
イメージが作成されると、そこからインスタンスを起動する準備が整います。カスタム・イメージの詳細ページで、「インスタンスの作成」を選択し、次の情報を入力します。
- 名前:インスタンスの名前を入力します。
- コンパートメント:インスタンスを起動するコンパートメントを選択します。
- 可用性ドメイン
- VCNおよびサブネット。このチュートリアルでは、パブリック・サブネットを使用してVPN接続をスキップできます。
- SSHキー: 2つのオプションがあります: 新しいSSHキーを生成するか、AWSで使用したものと同じキー・セットを使用します。同じキー・セットを引き続き使用する場合は、AWSでソースVMに使用したものと同じ公開キーをアップロードします。AWS公開キーが
.pem
キー形式の場合、それを.pem.pub
に変更してOCIインスタンスにアップロードします。これにより、同じ秘密キーを使用してVMにSSHで接続し続けることができます。
-
仮想マシンを起動します。プロビジョニングが終了したら、それに接続できます。接続するユーザーは opcではなく ec2-userであることに注意してください。
ssh -i pathToKey/keyfile ec2-user@<publicIp>
関連リンク
承認
- 著者 - Ricardo Malhado (プリンシパル・クラウド・ソリューション・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Migrate a Red Hat Enterprise Linux Virtual Machine from Amazon Web Services to Oracle Cloud Infrastructure
F95991-01
April 2024