サイトアイコン 協栄情報ブログ

RDSのMySQL5.7標準サポート終了に伴う8.0へのアップグレードについて

はじめに

 

みなさんお疲れ様です!

今回は、タイトルの通りRDSのMySQLデータベースのアップグレードについて調査・検証していきたいと思います。

 

■本記事の背景

今回のアップグレードを実施する背景としては、AWSのコストがある月を境に跳ね上がっていたことがありました。

グラフのみをお見せすると以下のような感じで2024年3月からRDSの料金がほぼ倍になってしまっていることがわかります。(泣)

料金明細の詳細を見てみると、RDSの欄に2月までは存在していなかった項目が追加されていることがわかりました。

 

「USD 0.120 per hour per vCPU running RDS Extended Support for MySQL 5.7 in Year1,Year2」

記載を見るにサポート関連の料金だとわかり、調査するにいたりました。

■MySQL 5.7の標準サポート終了について

 

AWS公式ドキュメントを見てみると

RDSでサポートされているMySQLのメジャーバージョンのサポート期限について記載があり、

その中でver5.7の標準サポート期限は「2024年2月29日」と記載があります。

 

本来サポートが終了しただけではサポートが受けられなくなるのみで料金が増えることはないのですが、

RDSについては「延長サポート」というサービスを行っているようです。

延長サポートについては、AWSユーザーガイドクラスメソッドさんの記事にもあるように、

「RDS 標準サポート終了日に、Amazon RDS はデータベースを RDS 延長サポートに"自動的に"登録します。」との記載があります。

上記で調査したように、5.7からアップグレードをせずにおいておくと自動的に有償のサポートに切り替わってしまうようですね。

今回のケースではMySQL 5.7にこだわる必要がありませんので8.0へアップグレードして料金を抑えていきたいです。

では早速アップグレードの方法について検証しながら進めていきます。

 

■MySQL 8.0へのアップグレード方法

①検証用インスタンス作成中の注意点

今回、検証用にRDSのデータベース作成から行いましたが、メインはアップグレードの検証ですので

作成に関してはバージョン関連の注意点のみ記載します。

 

データベース作成の際に「MySQL」を選択すると、画像のようにエンジンバージョンを選択できます。

ここで、今回検証したいバージョンの5.7を選択した際、デフォルトでは「RDS延長サポートの有効化」がONになっています。

「最初から選択すれば有償サポートなしで作成できるのか~」と思い、チェックを外した状態で作成しようとしましたが、以下のエラーではじかれてしまいました。

どうやらチェックする箇所はあるものの、有償サポート無効のまま作成はできないようです。

これから作成するにあたって5.7を選択することはないとは思いますが、念のため発見として記載しておきます。

 

②アップグレード手順

では、作成したインスタンスを使用してアップグレードしてみます。

※手順については弊社メンバーの記事を参考に実施してみました!

今回使用するのはこちらのインスタンスです。

インスタンスの設定について事前確認するとエンジンバージョンが「5.7.44」であることが確認できます。

ちなみに「レコメンデーション」タブにサポート終了するのでアップグレードしてくださいという内容が記載されていました。

アップグレード前の状態が確認できたところで実際にアップグレードしていきます。

アップグレードしたいインスタンスを選択した状態で、コンソール上右上にある「変更」を押下します。

画面が遷移したら「エンジンバージョン」の箇所を押下すると、どのバージョンにアップグレードするのかを選択できるようになるので
今回アップグレードしたい最新の「8.0.36」を選択します。

選択すると画面のように、ダウンタイム最小化のための「ブルー・グリーンデプロイ」作成も可能なようです。

こちらは後ほど検証してみるとして、まずは作成なしで実施していきます。

画面を下の方にスクロールしていくと、詳細設定ができるので検証のために「ログのエクスポート」にすべてチェックを入れました。

そのほかはデフォルトのままで、「続行」を押下します。

「変更のサマリー」が確認できるので、以下項目を確認して「DBインスタンスを変更」を押下します。

・新しい値にアップグレード後のバージョンが記載されているか
・変更のスケジュールは今回は「すぐに適用」

しばらく(私の場合は5分程度でした)すると、正常に変更された通知が出てきます。

実際に詳細を見ていきます。

「レコメンデーション」タブを見ると、アップグレード前はでていたサポート終了の項目が消えているのが確認できますね。

ログを見てみても問題なくアップグレードできていそうです。

「設定」タブからバージョンを確認すると、画面のように「エンジンバージョン」がアップグレードされていました!!

ただここで問題が発生しています。

上の画像の一番下の「RDS延長サポート」が「有効」のままになってしまっています!!

このままだとアップグレードしたのに結局料金が発生してしまうんじゃ、、と思ったのでさすがに調査しました。

③延長サポートの設定について

調査の方法としては、AWS Supportを活用させていただきました。
※以下、サポートからの回答を一部引用しております。

まず、エンジンバージョンアップグレードによって Amazon RDS 延長サポートの設定(「有効」)は変更されません。

しかし、Amazon RDS 延長サポートの設定が 「有効」 であってもアップデート後のメジャーバージョン(MySQL 8.0)は RDS 標準サポートが終了していないため、料金は発生しません。

今回アップグレードしたMySQL 8.0 の RDS 標準サポート終了日は 2026 年 7 月 6 日 で、標準サポートの対象となり延長サポートでないため、料金は発生しません。

将来、エンジンバージョン(MySQL 8.0)が延長サポートに移行すると、料金が再び発生することとなります。

 

結論としては、設定は「無効」にすることはできず「有効」のままだが料金自体は発生しないそうです!!

料金が発生するかどうかは利用中のエンジンバージョンの標準サポート期間を確認する必要があるので日ごろからよく確認しておく必要がありそうですね!

 

■ブルー/グリーンデプロイを使用した手順

ここでは、上記で使用したものと同じインスタンスを用意して②の手順で実施しなかった「ブルーグリーンデプロイ」を使用してアップグレードを実施していきます。

①ブルー/グリーンデプロイとは

-===================================================AWSサポート回答を引用=================================================-
ブルー/グリーンデプロイは本番環境をコピーしてステージング環境を作成し、
本番環境とステージング環境を論理レプリケーションにより同期するものです。

この方法を使用して、ステージング環境にてアップグレードを実施し、アップグレード完了後に本番環境を切り替えられます。

切り替え時にはダウンタイムが発生しますものの通常は 1 分程度です。

こちらはブルー/グリーンデプロイを用いない通常のアップグレードで発生するダウンタイムよりも短いことが想定されます。-===========================================================================================================================-

 

上記にあるように、ダウンタイムを軽減しつつアップグレードができる機能のようです!!

今回のように運用中のデータベースをアップグレードしたい場合はダウンタイムをどれだけ少なくできるかが

大事になってきますのでこちらの方法を使って実施したほうがよさそうですね。

 

②アップグレード手順

 

手順の詳細および制限事項について、公式のユーザーガイドで記載がされていますので
ご自身の環境で実行可能かどうか確認してから検証するのがおすすめです!

本記事では②でアップグレードする前のver5.7の状態のインスタンスを別に作成して実行してみます。

早速手順に則って実行してみます。

 

まず、アップグレードするインスタンスを選択した状態で右上の「アクション」を押下し
「ブルー/グリーンデプロイの作成・新規」を選択します。

デプロイ設定画面が出てきたら、まず「ブルー/グリーンデプロイ識別子」を任意で入力します。

次に「ブルー/グリーンデプロイ設定」でステージング環境のエンジンバージョン(アップグレードしたいバージョン)を選びます。

選択すると、画像のように「現在」のバージョンと「推奨」のバージョンが記載されています。
今回は、上でもアップグレードを実施したバージョンと同じにしたいので
「8.0.36」を選択し、「作成」を押下します。

正常に作成されると以下のような通知が出ます。

そして、画像のような構成のデプロイが作成されました。

以下のような構成になっていればOKです。
・ブルーインスタンス(アップグレード前の元のインスタンス)
・ブルー/グリーンデプロイ
・グリーンインスタンス(アップグレードした状態のステージング環境用インスタンス)

実際のバージョンを見てみると、ステージング環境用のグリーンインスタンスのバージョンはきちんとアップグレードされていることが確認できます。

ここまでできたら、必要に応じて「ステージング環境の変更」や「ステージング環境のテスト」を行います。
ただ今回はアップグレードの検証を目的とした記事ですのでバージョンの確認のみ実施しました。

準備が整ったらステージング環境を昇格させ、本稼働環境へと切り替えを行います。

作成されたブルー/グリーンデプロイを選択した状態で右上の「アクション」から「切り替え」を押下します。

画面が「スイッチオーバーの概要」に遷移しましたら、それぞれ切り替える対象の環境について確認し、「切り替え」を押下します。
今回だと、エンジンバージョンが「ブルーは5.7.44」「グリーンは8.0.36」であることが確認できたらOKです。

切り替えが完了すると、画像のような構成に変わりました。
※私は切り替えに20分ほどかかりました。

よく見ると名称も、アップグレードすると勝手に新しい環境には元の名称、古い環境にはoldと記載してくれているのがわかります。
こちらの命名規則についても公式のドキュメントに記載されているのでぜひ見てみてください。

★アップグレード元
[test-ito-blue-green]→[test-ito-blue-green-old1]

★アップグレード先
[test-ito-blue-green-green-mpz67y]→[test-ito-blue-green]

実際に切り替えてくれているのかを確認してみます。

古い方のエンジンバージョンは「5.7.44」のままで

新しい方は「8.0.36」になっていますね!

とはいえここでも「RDS延長サポート」が「有効」のままですので、上の手順で変更する必要がありますがアップグレード自体はできました!

あとは不要になった[test-ito-blue-green-old1]と、[test-ito-blue-green-deploy]を削除すればコスト削減にもなります。

おわりに

ダウンタイム最小を考慮した時のアップグレードの方法や仕組み、MySQLのサポート期間や料金を学びなおすことができてよい検証だと自分でやっていて感じました!

料金の部分については、払う必要がない料金をできるだけ減らしていきたいので日ごろからどんなリソースにどのような料金が発生するかは注意深く見ておく必要がありますね!

参考

▼Amazon RDS での MySQL のバージョン(AWS公式ドキュメント)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html#MySQL.Concepts.VersionMgmt.ReleaseCalendar

▼Amazon RDS 延長サポートの使用(AWS公式ユーザーガイド)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/extended-support.html

▼安定したAWSアカウントのデータベース利用費が2024年3月から増えていたらRDS延長サポートを要チェック!
https://dev.classmethod.jp/articles/how-to-supress-amazon-rds-extended-support-cost/

▼Amazon RDSのMySQLエンジンバージョンを8.0にアップグレードしてみた
https://cloud5.jp/saitou-rds-versionupgrade/#amazon-rds-for-mysql

▼Amazon RDS ブルー/グリーンデプロイの概要・制限事項・ブルー/グリーンデプロイについて(AWS公式ユーザーガイド)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/blue-green-deployments-overview.html

▼Amazon RDS でサポートされている MySQL のメジャーバージョン
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html#MySQL.Concepts.VersionMgmt.ReleaseCalendar

モバイルバージョンを終了