Red Hat サブスクリプション を Alibaba Cloud に持込してみた
日本では、RHEL(Redhat Enterprice Linux) を採用するサービスが多いでしょう。それらのサービスをオンプレミスからクラウドに移行する際に、既存購入した RHEL サブスクリプションを、クラウド環境に持ち込みってどうする、といった課題もよくありますね。
この記事では、Alibaba Cloud ECS イメージ機能を用いて、RHEL(Red Hat Enterprise Linux)のサブスクリプションを Alibaba Cloud ECSに持ち込む方法を紹介したいと思います。
大体の流れ
今回は、Alibaba Cloud ECS イメージ Import/Export 機能を利用して、オフラインで準備した仮想マシンのイメージを Alibaba Cloud ECS にインポートし、RHELを内蔵した ECS インスタンスの作成用「カスタムイメージ」にします。Alibaba Cloud ECS イメージ Import 機能が対応した仮想マシンイメージフォーマットは RAW、VHD、または QCOW2 となります。
この手順では、以下の流れで実施します:
- Red Hat Cloud Access を Alibaba Cloud アカウントと紐付
- VirtualBox を用いて、RHEL イメージを作成
- ECS イメージインポート機能を対応するフォーマットへ交換(OVA -> QCOW2)
- OSS にイメージファイルをアップロードし、ECS にインポート
- RHEL インスタンス作成、動作確認
事前準備
有効な RHEL サブスクリプションの他に、以下のツールが必要となります:
- Virtual Box。この記事ではバージョン 6.0.14 r133895 を使います。
- qemu-img。Virtual Box が扱うフォーマットを QCOW2 フォーマットに交換するためのツールとなります。
- RHEL の ISO イメージ(Virtual Box のマシン用)
Red Hat Cloud Access を Alibaba Cloud アカウントと紐付
Red Hat Cloud Access については ここでご参考ください。Red Hat 管理画面にログインし、Red Hat Cloud Access へアクセスできます。「Enable a new provider」をクリックして、ドロップダウンから「Alibaba Cloud」が選択できます。Alibaba Cloud を選択すると、Alibaba Cloud と紐付ける必要な情報が要求されます。
情報を入力してから、「有効化」ボタンをクリックするとこのステップが完了します。
RHEL 仮想マシンをインストールし、初期設定する
Red Hat 管理画面へログインした後、RHEL の ISO イメージがダウンロードできます。今回は RHEL 7.6 を使って、イメージを作ります。まずはダウンロードした ISO イメージを用いて、VirtualBoxの仮想マシンに Red Hat をインストールします。
※注意点:Red Hat をインストールする際に、「ベース環境」の設定ができます。ここでは、「最小限のインストール」がデフォルトになりますが、この手順では他のツールが必要になるので、「インフラストラクチャーサーバー」を選びます。
Red Hat をインストールした後に、仮想マシンを起動して、以下のコマンドを実行する必要があります:
# VirtualBoxのネットワークはNATで設定し、Redhat側のインターフェースを有効する$ nmcli connection modify enp0s3 connection.autoconnect yes# インストールしたマシンを Red Hat登録する$ subscription-manager register --username <Red Hat 管理画面のユーザID> --password <Red Hat 用パスワード># Red Hat のサブスクリプションをアタッチする$ subscription-manager attach --auto# Red Hat のリポジトリーを有効化$ subscription-manager repos --enable rhel-7-server-rpms# /etc/shadowの権限変更$ chattr +i /etc/shadow# sshを有効化$ systemctl start sshd.service# ntpを有効化$ yum install ntp$ systemctl enable ntpd$ cp /etc/ntp.conf /etc/ntp.conf.bk$ vi /etc/ntp.conf
/etc/ntp.conf
の既存の中身を全部削除し、以下の内容に変更する:
driftfile /var/lib/ntp/driftpidfile /var/run/ntpd.pidlogfile /var/log/ntp.log# Access Control Supportrestrict default kod nomodify notrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noqueryrestrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noqueryrestrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noqueryrestrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery# local clockserver 127.127.1.0fudge 127.127.1.0 stratum 10restrict ntp1.aliyun.com nomodify notrap nopeer noqueryrestrict ntp1.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp2.aliyun.com nomodify notrap nopeer noqueryrestrict ntp2.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp3.aliyun.com nomodify notrap nopeer noqueryrestrict ntp3.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp4.aliyun.com nomodify notrap nopeer noqueryrestrict ntp4.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp5.aliyun.com nomodify notrap nopeer noqueryrestrict ntp5.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp6.aliyun.com nomodify notrap nopeer noqueryrestrict ntp6.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noqueryrestrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noqueryserver ntp1.aliyun.com iburst minpoll 4 maxpoll 10server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp2.aliyun.com iburst minpoll 4 maxpoll 10server ntp2.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp3.aliyun.com iburst minpoll 4 maxpoll 10server ntp3.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp4.aliyun.com iburst minpoll 4 maxpoll 10server ntp4.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp5.aliyun.com iburst minpoll 4 maxpoll 10server ntp5.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp6.aliyun.com iburst minpoll 4 maxpoll 10server ntp6.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10
次に、Alibaba Cloud ECS にインポートした後に ECS インスタンス作成するのに clout-init を準備する必要があります:
$ yum install cloud-init
cloud.cfg
を以下の内容に変更します:
# The top level settings are used as module# and system configuration.# A set of users which may be applied and/or used by various modules# when a 'default' entry is found it will reference the 'default_user'# from the distro configuration specified belowusers:- defaultuser:name: rootlock_passwd: False# If this is set, 'root' will not be able to ssh in and they# will get a message to login instead as the above $userdisable_root: false# This will cause the set+update hostname module to not operate (if true)preserve_hostname: falsemanage_etc_hosts: localhostsyslog_fix_perms: root:rootdatasource_list: [ AliYun ]# Example datasource configdatasource:AliYun:support_xen: falsetimeout: 5max_wait: 300cloud_init_modules:- migrator- source_address- pip-source- bootcmd- write-files- set_hostname- update_hostname- update_etc_hosts- rsyslog- users-groups- sshcloud_config_modules:- mounts- locale- set-passwords- yum-add-repo- package-update-upgrade-install- timezone- puppet- chef- salt-minion- mcollective- disable-ec2-metadata- runcmdcloud_final_modules:- rightscale_userdata- scripts-per-once- scripts-per-boot- scripts-per-instance- scripts-user- ssh-authkey-fingerprints- keys-to-console- phone-home- final-messagesystem_info:distro: rhelpaths:cloud_dir: /var/lib/cloudtemplates_dir: /etc/cloud/templatesssh_svcname: sshd# vim:syntax=yaml
ここまで Red Hat のインストールと初期設定が完了します。
ECS イメージインポート機能を対応するフォーマットへ交換(OVA → QCOW2)
次のステップでは、準備した RHEL 仮想マシンを VirtualBox から OVA イメージをエキスポートします。
出来上がった OVA ファイルから vmdk ファイルを取り出す必要があります:
$ tar -xvf RHEL-76.ova
実行すると、RHEL-76-disk001.vmdk
ファイルが取り出せます。
最後に、vmdk
ファイルから qcow2
ファイルに交換し、このステップが完了します:
$ qemu-img convert -f vmdk -O qcow2 RHEL-76-disk001.vmdk RHEL-76.qcow2
OSS にイメージファイルをアップロードし、ECS にインポート
準備した qcow2
ファイルを Alibaba Cloud OSS バケットにアップロードします。ファイルサイズが大きいため、aliyun-cli や OSS Browser を利用してアップロードするのをおすすめです。
※注意点:ECS イメージインポートする際に、qcow2 ファイルを保存する OSS バケットのリージョンと同じリージョンである必要があります。そして、インポートしたイメージを利用して作成したインスタンスが、同じリージョンとなります。
次に、ECS コンソールにアクセスして、イメージをインポートします。
ECS にイメージをインポートするために、ECS サービスから OSS へのアクセスを許可する必要があります。インポート画面の指示に従って、必要な情報入力とステップを完了すると、イメージのインポートができます。イメージインポート完了まで少し時間がかかります。
RHEL インスタンス作成、動作確認
最後に、インポートしたイメージを利用して ECS インスタンスを作成してみましょう。インスタンス作成と同じ手順で行います。但し、以下の点に注意する必要があります:
- 作成するインスタンスのリージョンがイメージのリージョンと同じとなること
- イメージを選択するときに、「カスタムイメージ」を選択し、インポートしたイメージを選ぶこと
- インスタンスの「ログイン認証」設定に、「イメージのパスワードを使用」という選択がありますので、適切に設定すること
インスタンスを作成してから、アクセスして動作確認してみましょう
ここで既存の Red Hat サブスクリプションを無事に Alibaba Cloud に持込できました。