#0031

【AWS】知識ゼロから理解するRDS超入門

2018-12-17 12:34 2019-02-28 17:57 "ゆざ"

RDSは、ただのデータベースではないってご存知ですか。

一見、MySQLPostgreSQLをEC2インスタンスにインストールするのと同じような働きなので、高い料金を払って使う必要はないのではないかと思われるかもしれません。

しかし、RDSにはデータベースを安全安心に稼働させるためのすごく便利な機能がたくさんあります。

ここでは、AWSでインフラ環境を構築し始めている方やこれからAWSを使おうとしているAWS初心者の方に向けて、RDSの良さを専門用語の解説を踏まえてお話していきます。

スポンサーリンク

Amazon RDSとは

Amazon RDS(Amazon Relational Database Service)とはAmazonの提供するデータベースサービスです。

AWS公式では、

Amazon Relational Database Service (Amazon RDS) を使用すると、クラウド上のリレーショナルデータベースのセットアップ、オペレーション、スケールが簡単になります。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの時間がかかる管理タスクを自動化しながら、コスト効率とサイズ変更可能なキャパシティーを提供します。これにより、アプリケーションに集中することができ、必要とされる高速なパフォーマンス、高可用性、セキュリティ、互換性をアプリケーションに実装できるようになります。

とRDSを紹介しています。

確かにMySQLPostgreSQLをEC2インスタンスにインストールすれば、データベースをAWSインフラ環境へ導入することはカンタンです。

しかし、データベースとはいわばWebサービスにおけるコアといってもいいほど重要なシステムであり、強靭な高可用性耐障害性が求められます。

それらを実現するのが、このRDSというサービスなのです。

RDSは、データベースが止まらないように設計・運用する上で大変活躍してくれます。

ここでRDSのメリットをまとめます。

  1. 高速なパフォーマンス
  2. 強靭な高可用性
  3. 安全なセキュリティ
  4. 耐障害性(フォールトトレランス)

これから、なぜこのようなメリットを実現できるのかについて専門用語の解説を踏まえてお話していきます。

MultiAZ構成(マルチアベイラビリティゾーン構造)

まずは、RDSが強靭な高可用性や耐障害性を実現するための構造であるMultiAZ構成(マルチアベイラビリティゾーン構造)について解説します。

結論から述べると、MultiAZ構成とは以下の図のように複数のデータセンターであるAZ(Availability Zone)を対してRDSが配置される構造のことを言います。

RDSのマスター/スレーブ構造

起動時に用意されているMultiAZオプションをオンにすると、自動的に2つのRDSを2つのAZに渡って構築してくれます。

これらのRDSは、マスター(プライマリ)スレーブ(セカンダリ)という関係性があり、マスターへの変更が自動的にスレーブに反映される仕組みとなっています。

この仕組みをレプリケーションと呼び、その中でもこれはマスターへの変更後にスレーブを変更が完了してから応答するので同期レプリケーションといいます。

同期レプリケーションは、スレーブへのデータの反映を待つ時間だけ数ms遅延が生じるのですが、データベース障害の影響を最小限に抑えることができるのです。

スレーブとは

スレーブとは、言うなればマスターのバックアップのようなものです。

スレーブの構造

そして、ただのバックアップではなくマスターへの変更を即座に反映することができるバックアップなのです。

さらに、災害などでマスターが属しているデータセンターに異常が発生し、マスターの機能が停止してしまった場合にもこのスレーブは働いてくれます。

なぜなら、スレーブが代わりにマスターへ昇格することでデータベースを安定稼働させ続けることができるからです。(これをフェイルオーバーと呼びます。)

リードレプリカとは

リードレプリカとは、マスターからレプリケーションされた読み込み専用のデータベースです。

リードレプリカの構造

この図のように、リードレプリカを複数台設置させることで、読み込みが多いサービスではデータベースに1つにかかる負荷を削減させ、データベースの負荷分散をすることができます。

リードレプリカを使用する設計だとデータ読み込み(SELECTクエリ)を行う場合はリードレプリカが処理します。

そして、その他のデータの削除(DELETEクエリ)、更新(UPDATEクエリ)、追加(INSERTクエリ)に対してはマスターが処理を行います。

しかし、データベースに対するクエリによって、どのデータベースに処理をさせるかはAWSでの設定ではなく、プログラムを書く必要があるということを注意してください。

ちなみに、WordPressではHyperDBというプラグインを使用することで、Readクエリ(SELECT)をリードレプリカへ、Writeクエリ(DELETE、UPDATE、INSERT)をマスターへルーティングすることができます。

また、Ruby on RailsやLaravelなどのフレームワークにおいても、ReadクエリとWriteクエリのルーティング手法が用意されていますので、ご自身の環境に合わせて設定を行うことができます。

さらに、より可用性を向上させるためには複数のリードレプリカへのルーティングをロードバランサーによって負荷分散させる方法などもあるので頭に入れておきましょう。

安定稼働するためのフェイルオーバー

先ほど少し話にも出ましたが、フェイルオーバーとはマスターに異常が発生した際にスレーブが代わりにマスターへ昇格することでデータベースを安定稼働させ続ける機能のことです。

マスターへの昇格には、通常 60 ~ 120 秒で完了します。

ただし、大規模なトランザクション等によって、増加する場合もあります

また、MultiAZ構造でフェイルオーバーした際にエンドポイントは変わらないのですが、必ずDNSの書き換えが発生します。

そのため、接続先のIPアドレスをキャッシュし続けると、アプリケーション側でフェイルオーバー先のDBインスタンスへ接続できないという問題が発生しますので注意してください。

フェイルオーバーが自動的に行われるには以下のような条件があります。

  1. マスターのAZ機能停止
  2. マスターのエラー
  3. DBインスタンスのサーバータイプ変更
  4. ソフトウェアのパッチ適用中

また、手動でテストを行うには、

  1. Amazon RDS コンソールを開く
  2. ナビゲーションの[インスタンス]から対象のインスタンスを選択
  3. [インスタンス]の操作から[再起動]を選択
  4. [フェイルオーバーし再起動しますか?]をチェック

といった手順で設定を行うことができます。

スペック不足時にはスケールアップ

RDSは、ECと同様にインスタンスタイプをスケールアップすることができます。(RDSのインスタンスタイプ一覧はコチラ

CPUのスペック不足を感じたら、コンソールからボタン1つでインスタンスタイプの変更が可能なのです。

しかし、インスタンスタイプの変更には必ずインスタンスの停止が必要なので必然的にフェイルオーバーが行われます。

したがって、サービス自体を一時的に停止させなければいけなくなるため、サービスをリリースする前にできるだけスケールアップの必要がないようなインフラ設計を心がけましょう。

RDSの料金

AWSを利用する上で一番シビアに考えなければいけない点が料金についてだと思います。

ここでは、Amazon RDS for MySQLの例にしてカンタンな料金体制について説明していきます。

Amazon RDS for MySQL以外についての料金体制もAWS公式-Amazon RDS の料金に書かれているので参考にしてみてください。

まず基本的にRDSにかかる費用は、

  1. インスタンスタイプ
  2. ストレージ容量
  3. データ転送量

の3つの要素があります。

そのため、この3つがわかっていればおおよその費用を計算することができます。

では、早速計算していきましょう。

ここで例に使うのは、リージョンがアジアパシフィック(東京)リードレプリカを利用しないMultiAZ構造のRDSインスタンスです。

インスタンスタイプは一番スペックの低いdb.t2.microを選択、ストレージは10GB、データ転送量はざっくり10GBで計算します。

以下がそれらの情報を表にまとめたものです。

  インスタンスタイプ ストレージ容量 データ転送量
スペック db.t2.micro 汎用 (SSD) ストレージ -

基本料金

$0.052/時 1GBあたり$0.276/月

$0.114/GB

(9.999 TB/月まで/1GBまでなら無料)

使用量 - 10GB 10GB
月額費用 $37.44 $2.76 $1.14

したがって、日本円で1ヶ月にかかるRDSの費用は合計で約4671円($1=113円計算)となります。

ここにさらにリードレプリカを1つ追加すると、1番スペックの低いもの(db.t2.micro)でも1ヶ月に約2115円($0.026/時*24時間*30日)かかるので安くはありませんね。

だからこそAWSに対する十分な知識を身につけ、サービスの規模やデータ処理量にあったインフラ設計を行なっていきましょう。

ちなみに、ちょっとお試しで使いたいという人にはRDSの無料枠もあるのでぜひ活用してみてください。

まとめ

今回解説してきたことを一言ずつでまとめていきます。

RDSとは、「止めないためのデータベースサービス」。

スレーブとは、「マスターのバックアップ」。

リードレプリカとは、「読み込み専用のデータベース」。

MultiAZ構造とは、「複数のAZに渡ってRDSを配置する構造」。

フェイルオーバーとは、「スレーブがマスターに昇格することで安定稼働させ続ける機能」。

スケールアップとは、「インスタンスタイプの変更」。

これでRDSの基本を学ぶことができたはずです。

次は、実際に手を動かしながらRDSの挙動や設定を確かめてくださいね。

この記事で、少しでもあなたが脱初心者となる手助けをすることができましたら幸いです。

この記事を書いた人

学生Webエンジニア PLANインターン生 PHP Laravel Python HTML CSS JS

【名前】 "ゆざ"

【関連】 株式会社PLAN / MIYABI Lab / Tmeet(twitterユーザーマッチングサービス) /

【MIYABI Lab運営】23歳/同期がト◯タやMicr◯softに就職する中、ベンチャーに未経験でWebエンジニアになるのを選んだ脳科学専攻の理系院生◆人見知り日本縦断◆機械学習/Web歴5ヶ月

Twitterやってます

最新の技術ブログはこちら