フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saitoです。
此度は過去の案件対応で、AMIの製品コードが変更できないルールを思い知った経緯を紹介します。
なお、これは2019年にあったことなので情報が古いおそれがあることをご承知おきください。
CentOS6のAMIをCentOS7にアップグレードしたい
とある旧世代EC2インスタンスのCentOS6をアップグレードして、CentOS7の入ったNitro世代EC2インスタンスに変えることは可能か調査することがありました。
インスタンスタイプはm4.large。これをNitro世代のm5.largeにしたい。AMIはAWSマーケットプレイスのCentOS6のものを使用していていました。
このAMIは古すぎてNitro世代タイプに変更することができません。なら中身をCentOS7にしたらどうだ、という考えでした。
そのままアップグレードして使うことが可能なら、データ移行や各種設定をし直す手間が省けます。
まずはアップグレードしたい旧世代EC2インスタンスのAMIを作成してインスタンスを複製。複製先で検証をおこなうことにしました。
アップグレード準備
CentOS側でアップグレード用のツールが用意されています。
7にアップグレードする準備用の「PRE UPGRADE TOOL」なるものをインストールします。
# vi /etc/yum.repos.d/centos-upgrade.repo
[centos-upgrade]
name=centos-upgrade
baseurl=https://buildlogs.centos.org/centos/6/upg/x86_64/
enabled=1
gpgcheck=0
# yum -y install https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/openscap-1.0.8-1.0.1.el6.centos.x86_64.rpm
# yum -y install redhat-upgrade-tool preupgrade-assistant-*
アップグレード用URLのミラーを追加
# mkdir -pv /var/tmp/system-upgrade/base/ /var/tmp/system-upgrade/extras/ /var/tmp/system-upgrade/updates/
# echo http://mirror.centos.org/centos/7/os/x86_64/ >> /var/tmp/system-upgrade/base/mirrorlist.txt
# echo http://mirror.centos.org/centos/7/extras/x86_64/ >> /var/tmp/system-upgrade/extras/mirrorlist.txt
# echo http://mirror.centos.org/centos/7/updates/x86_64/ >> /var/tmp/system-upgrade/updates/mirrorlist.txt
preupgコマンドでアップグレードの条件が整っているかチェックします。
# yes | preupg -v
コマンド実行後、result.html というファイルが出力されます。
ブラウザで開いて内容を確認。修正の必要な箇所や自動アップグレードされないパッケージなど詳細が書かれているので必要に応じて修正したりしなかったりします。
↓
アップグレード前
私の場合、アップグレード時のエラー回避のため直前に次の内容をおこないました。
yumのbaseurlをvaultからmirrorにする
# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_191025
# cp /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo
yum update でCentOS6.10に
# yum -y update
# reboot
足りないリポジトリ追加
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6.rpm
ipv6系を無効化する(これやらないとなぜか再起動に失敗する)
# vi /etc/modprobe.d/*ホスト名*
-- 追記
options ipv6 disable=1
# chkconfig ip6tables off
アップグレード
# centos-upgrade-tool-cli --force --network=7 --instrepo=http://vault.centos.org/7.0.1406/os/x86_64/ --cleanup-post
実行後、rebootするとアップグレード始まるよ、と出てきますが
その前にsshの自動起動を有効化してリモートでログインできるようにしておきます。
# vi /etc/rc.d/rc.local
-- 末尾に追記
systemctl enable sshd && systemctl start sshd.service
# reboot
これでCentOS7へのアップグレードは完了。
インスタンスタイプの変更(できなかった)
ここからはコマンド等のメモが残っていなかったので詳細は省きます。
このあとインスタンスタイプを変更するために以下を実施しました。
- C5M5チェックスクリプトをダウンロードして実行し、条件を満たしているかチェック→OK
- ENA有効化
その後AMIを作成してインスタンスタイプをNitro世代の「m5.large」にして起動する手筈だったのですが、次のメッセージが出てきて起動できません。
The instance configuration for this AWS Marketplace product is not supported.
Please see the AWS Marketplace site for more information about supported instance types, regions, and operating systems.
CentOS7にアップグレードしても、CentOS6のAMIとして扱われていることに変化はない模様。
うーむ…でも中身はCentOS7になったんだしCentOS7のAMIとして使わせてほしい。といった旨をAWSのサポートに問い合わせてみたところ、
この度はお問い合わせ頂きまして、誠にありがとうございます。
特定インスタンスの製品コードを、CentOS7 のものへ変更することをご希望でいらっしゃる状況とお察し申し上げます。
大変残念ながら、現在の仕様といたしまして下記ドキュメントの通り製品コードの変更は不可でございます。
・有料 AMI
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/paid-amis.html#using-paid-amis-support
————————————————–
一度設定した製品コード属性を変更したり削除したりすることはできません。
————————————————–
そ、そうですか。
ということで、結局CentOS7のAMIを新しくm5.largeで立ち上げてデータ移行して最初から設定し直すことになりました。
どうあがいてもAMIの製品コードは変えられない、ということを覚えておきましょう。
コメント