こんにちは、@Manabu です。
今回は、AWSユーザーなら誰しもが直面しているかもしれない一つの大きな課題である「AWSの使用料金」の増加に注目して記事を書いています。
特に、データベースサービスであるAmazon RDSのコストが想像より大きくなってしまい、もっと良い方法がないのか検討されている方もいるのではないでしょうか。
私のケースでは、Wordpressサイトのバックエンドで動作しているDBのコスト削減を目指して対応した内容について紹介します。
この記事はこんな方におすすめです。
AWSのRDSは、セットアップのしやすさや運用の簡単さで知られていますが、時にはその利便性が高いコストにつながることがあります。
特にスタートアップや小規模企業では、これらのコストがビジネスの持続可能性に影響を与えかねません。
RDSを使用せずにサイトを運用し続ける方法について模索していきましょう。
はじめに
まず、今回コスト削減のために対応するRDSの簡単な紹介と、対応前後の構成について説明します。
Amazon RDSとは?
RDS(Relational Database Service)は、スケーラブルなリレーショナルデータベースを簡単にセットアップ、運用、およびスケーリングすることができるマネージドサービスです。
MySQL、PostgreSQL、Oracle Database、SQL Serverなど、一般的なデータベースエンジンをサポートしており、高可用性や自動バックアップなどの機能を提供しています。
利便性と機能性が高い反面、コストはAWSの中でも高いサービスになります。
特にデータ量が増えたり、アプリケーションの複雑性が増すにつれ、コストに顕著に反映されます。
そこで今回は、コスト削減を目的として、これまで使用していたRDSからEC2インスタンス上のMySQL8.0への移行を検討しました。
この対応で、Wordpressサイトを維持しつつ、運用のコストを削減させるようにします。
対応前後の構成
今回対応する構成について、以下の二つの構成図を用意しました。
対応前の構成
今回対応する前の構成としては以下の図の通り、EC2にWordpressサイトを載せてDBにRDSを使用した構成になります。
対応後の構成
対応後としては、RDSを削除し、EC2インスタンス内に構築したMySQLをDBとしてサイトを維持し続けるように変更します。
このようなシンプルな対応によって、コスト削減を実行していきたいと思います。
注意事項
AWS RDSからEC2インスタンス上のMySQLへの移行を検討する際には、以下の3つの項目に注意してください。
セキュリティとバックアップの重要性
移行する前に、データの完全なバックアップを取得し、セキュリティ設定を適切に構成する必要が重要です。
EC2で自己管理するデータベースでは、RDSが提供していた自動バックアップやセキュリティ機能を自分で管理する必要があります。
EC2インスタンスのパフォーマンス最適化
EC2インスタンスのMySQLをDBとして使用する場合、適切なパフォーマンスを確保するために、リソース使用量の監視と適当なスケーリングを行う必要があります。
移行後は、データベースの不可に応じてEC2インスタンスのスペックを調整し、必要であればインスタンスの追加を検討するようにしましょう。
複数のEC2インスタンスを使用する場合のデータ整合性
今回の対応前の例だとEC2が1台構成になっていますが、複数台でRDSからデータを取得している場合、それぞれのEC2インスタンス内に独立したデータベースを持たせることでデータ整合性の問題が生じる可能性があります。
全体の構成を再検討し、必要に応じてデータベースの持ち方を検討することが重要になります。
データを頻繁に更新する場合や、EC2の台数が多い場合、RDSやEFSなど使用して料金を払ってでもマネージドサービスを利用した方が良い場合もありますので、ご自身の環境を鑑みてご検討ください。
移行手順
ここからは、今回行った手順の詳細について紹介します。
RDSのスナップショットを取得(バックアップ)
まず、RDSのバックアップを取得します。
※何かあった場合、戻す必要があるため必ずバックアップは取得するようにしましょう。
AWSのRDSのマネジメントコンソールから対象のDBを選択し、「アクション」→「スナップショットの取得」をクリックします。
スナップショット名を設定し、「スナップショットの取得」ボタンをクリックします。
EC2にMySQLデータベースを構築
EC2インスタンス上にMySQLをインストールします。
RDSで使用していたバージョンと同じものにするのが望ましいです。
移行時に違うバージョンの環境を用意すると、バージョンの差で発生する機能の違いやSQL構文の変更に対応できずエラーが発生する可能性があります。
私の環境では、RDSにMySQL8を使用していたため、EC2上にも同じくMySQL8をインストールします。
DBインストールから初期設定については長くなるため、この記事では省略します。
以下の記事に、「ECでMySQLのセットアップ」の手順をまとめていますので、そちらをご参照ください。
RDSからdumpファイルを取得
データ移行を行うためにRDSデータベースからダンプファイルを取得します。
mysqldumpコマンドを使用し、RDSインスタンスに接続してデータをエクスポートします。
今回は、ブログサイトしかなかったため、以下のコマンドで1つのデータベースのみ取得しています。
# blogというデータベースの情報をdump.sqlファイルにエクスポート
mysqldump -h 'RDSのエンドポイント' -p -u admin blog > dump.sql
取得したダンプファイルをEC2内のMySQLにリストア
mysqldumpによって生成されたダンプファイルを、EC2インスタンス内のMySQLデータベースにリストアします。
これには、mysqlコマンドを使用してMySQLデータベースにインポートすることができます。
データベースを1つインポートする場合、インポートするデータベースと同じ名前のデータベースをあらかじめ作成する必要があります。
# MySQLデータベースにログイン
mysql -u root -p
# blogというデータベースを作成
create database blog;
# MySQLデータベースからログアウト
exec
# blogというデータベースに取得したダンプファイルのデータをインポート
mysql -h localhost -u root -p blog < blog.sql
ここまでくると、RDSから必要なデータベースをEC2インスタンス内のMySQLデータベースにインポートが完了になります。
WordPressの設定をローカルホストに変更
WordPressのデータベース設定を更新して、新しいローカルのMySQLデータベースへの接続情報に変更します。
wp-config.phpファイルを編集し、以下の設定を更新します。
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'database_name_here' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'username_here' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
データベース名、ユーザー名、パスワードを更新し、ホスト名は ”localhost” に変更します。
これらの手順により、RDSからの移行が完了します。
移行後はデータの一貫性を確認し、ブラウザからアクセスしてWordpressサイトが正常に動作するか確認しましょう。
まとめ
個人で開発を行う場合、コストは避けて通ることのできない重要な要素です。
特にクラウドプラットフォームを利用する場合、どのサービスをどれくらい利用するのかによって、コストは大きく変動します。
今回の記事で紹介したAWS RDSからEC2インスタンス上のMySQLへのデータベース移行は、コスト削減を目指す開発者にとって一つの解決策です。
AWSはマネージドサービスを利用しないことも選択できますが、その分、開発者自身がより多くの知識を必要とし、システムの設計や運用において責任を持つ必要があります。
この自由度は、AWSの大きなメリットでもあります。自分のニーズに適したサービスを選択し、コストと機能性のバランスをとることが可能になります。
この記事を通して、マネージドサービスからよりコスト効率の良い自己管理型のサービスへの移行という選択肢を紹介しました。
最終的に、AWSを含むクラウドサービスの選択の中で重要なことは、機能性とコストのバランスを見極めるところにあります。自分にとって最良の選択ができるよう日々学習・挑戦していきましょう。