VirtualBoxのChangelogで以下の記載を見つけました。
VirtualBox 6.0.0 (released December 18 2018)
・Implemented support for exporting a virtual machine to Oracle Cloud Infrastructure
ということで、どんなもんかやってみました。
目次
やること
通常、イメージのエクスポートして、オブジェクトストレージアップロードして、それをイメージとしてインポートして、それを使ってインスタンス作成して…とする必要があるところを、(ほぼ)ワンクリックで仮想マシンからいきなりOCIインスタンス作成してしまおうというお話。
残課題
・paravirtualizedモードでのBYOIのやり方(今回のワンクリック方式ではまだできない?)
・インスタンスへの接続で失敗(凡ミスなのでやり直せばたぶんすぐできる)
・VBoxコマンドでやるやり方もあるらしいのでやってみたい
※インスタンスへの接続のところで失敗しています。接続の失敗はどちらかというと、用意しておいたOSの設定の問題で、BYOIという観点では完了しているのでとりあえず記事を公開しちゃいます。
1 事前準備
Virtual Boxの用意
Virtual Boxインストール
v6.0以降で追加された機能なので、6.0以降のバージョンをダウンロード、インストールします。
-
ココからダウンロード(実施時点の最新は"6.0.2"でした)
https://www.virtualbox.org/wiki/Downloads -
インストール
(手順省略)
Extension Packのインストール
件の機能を使うためにExtension Packが必要です(いきなりここではまった)。
-
同じくココからダウンロード("VirtualBox 6.0.2 Oracle VM VirtualBox Extension Pack")
https://www.virtualbox.org/wiki/Downloads -
インストール
(手順省略)
仮想マシンの作成
適当に仮想マシンを作成します。
今回はこんな感じで。
- Name : VBox
- Tyep : Linux
- Version : Oracle(64-bit)
- Memory : 1024MB
- Disk : 12.00GB
- Disk Type : VDI ★1
- Storage : 可変サイズ
- Encryption: No
- Network : Adapter 1 (Host Only Adapter) ★2
★1 OCIへのimportではVMDKかQCOW2がサポートされている。VBoxはVMDKで作れますが、いきなりこれで作るとつまらないと思ったので、VDIにしてみました。
The disk image must be a VMDK or QCOW2 file.
★2 ネットワーク構成は引き継がれないようです。
Existing network interfaces will not be recreated. Instead, a single network interface will be created after the import process is complete.
OSはこんな感じ(Oracle Linux 7.6のイメージを使いました)
[opc@localhost ~]$ uname -r
3.10.0-957.el7.x86_64 ★3
[opc@localhost ~]$ cat /etc/oracle-release
Oracle Linux Server release 7.6
[opc@localhost ~]$ hostname -A
localhost.localdomain
[opc@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:d5:b7:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.100/24 brd 192.168.56.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::54c2:3013:1eb8:674a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[opc@localhost ~]$
[opc@localhost ~]$ lscpu
アーキテクチャ: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
コアあたりのスレッド数:1
ソケットあたりのコア数:1
Socket(s): 1
NUMAノード: 1
ベンダーID: GenuineIntel
CPUファミリー: 6
モデル: 142
Model name: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz
ステッピング: 10
CPU MHz: 1896.002
BogoMIPS: 3792.00
ハイパーバイザーベンダー:KVM
仮想化タイプ: 完全仮想化
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2 キャッシュ: 256K
L3 キャッシュ: 6144K
NUMAノード 0 CPU: 0
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt flush_l1d
★3 Paravirtualized モードでBYOIするには、Linuxカーネル3.4以上でないといけないとのこと
Linux-based operating systems running the kernel version 3.4 or newer support paravirtualized drivers.
※ちなみにopcユーザーはノリで作ってしまったものです。OCIでインスタンス作る際にも勝手に作られる気もしますが、どうなることやら。念のため、別のユーザーも作っておきました。
[root@localhost ~]# id opc
uid=1000(opc) gid=1000(opc) groups=1000(opc)
[root@localhost ~]# id test
uid=1001(test) gid=1001(test) groups=1001(test)
oci cliのインストール
(手順省略)
以下の手順などを参考にしてください。
https://community.oracle.com/docs/DOC-1019624
PS C:\Users> oci -v
2.4.41
2 VBox仮想マシンからOCIインスタンス作成
ここからの手順は以下のマニュアルに従っています。
https://docs.oracle.com/cd/E97728_01/E97727/html/ovf.html#ovf-export-appliance
APIキーの作成
(手順省略)
以下のマニュアル通りにやればOKです。
https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm#How
OCI Profileの設定
- Virtual Box > File > Cloud Profile Managerをクリック
- "Add"をクリックして、プロファイルの名前を付ける(ここではOCItest)
- 既存のoci configを利用する場合は"Import"し、内容に間違いないがないか確認するのみでOK
- "Properties"をクリックして、必要なOCI環境情報を記入し、"Apply"
- 生成されたoci cliのconfigを、ociのconfigディレクトリにコピー(もしくは既存のconfigファイルに内容を追記)
- 私の場合"global settings directory"は"C:\Users\<ユーザー名>\.VirtualBox"でした。
イメージのエクスポート
-
Virtual Box > File > Export Appliance...をクリック
-
エクスポートしたい仮想マシンを選択
-
Formatで「Oracle Cloud Infrastructure」を選択
-
Accountで先ほど設定したプロファイルを指定し、"Export"
- 設定した情報が間違えているとここでエラーがでます
- 「テスト」的なボタンがないので、修正後は一度戻ってExport Applianceの選択からやり直す
- "Virtual System Settings"からOCIでの設定内容が確認できる
-
完了すると、対象のインスタンスがOCIで起動しています!
3 もろもろ確認
オブジェクトストレージのバケット確認
- サイズは737MBとだいぶ圧縮されてい
- opc-multipart-md5があるので、マルチパートでアップロードされたっぽい
カスタムイメージの確認
- EMULATEDモードになってる
- paravirutalizedモードにしたかったのだが、どうすればできるのか要調査
インスタンス確認
- 概ね想定通り。(EMULATEDモードになってしまったのは残念)
- Private IPは自分で指定したサブネットの中から、勝手に割当て
- Fault Domainは指定できなかった
インスタンスへ接続
で、出来ない…。
シリアルコンソールでの接続も失敗
よく考えたら、もともとのOSのSSH設定してないな…。
というわけで出直してきます。時間があれば。
4 参考情報
- Oracle VirtualBoxのマニュアル
- OCIのマニュアル
5 その他
-
従来(というか普通)の手順
-
- 仮想マシンのイメージをVMDKかQCOW2の形式でエクスポート
-
- Object Storageへアップロード
-
- イメージのインポート
-
- イメージを利用してインスタンス作成
-
-
アイコンはこちらからお借りしました
- PCのアイコンは「さくらのアイコンセット」より
- Virtual Boxのアイコンは「ICONFINDER」より
- OCIのアイコンは「Graphics for Topologies and Diagrams」より