【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
2018-12-17 12:34 2019-02-28 17:57
RDSは、ただのデータベースではないってご存知ですか。
一見、MySQLやPostgreSQLをEC2インスタンスにインストールするのと同じような働きなので、高い料金を払って使う必要はないのではないかと思われるかもしれません。
しかし、RDSにはデータベースを安全安心に稼働させるためのすごく便利な機能がたくさんあります。
ここでは、AWSでインフラ環境を構築し始めている方やこれからAWSを使おうとしているAWS初心者の方に向けて、RDSの良さを専門用語の解説を踏まえてお話していきます。
Amazon RDS(Amazon Relational Database Service)とはAmazonの提供するデータベースサービスです。
AWS公式では、
Amazon Relational Database Service (Amazon RDS) を使用すると、クラウド上のリレーショナルデータベースのセットアップ、オペレーション、スケールが簡単になります。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの時間がかかる管理タスクを自動化しながら、コスト効率とサイズ変更可能なキャパシティーを提供します。これにより、アプリケーションに集中することができ、必要とされる高速なパフォーマンス、高可用性、セキュリティ、互換性をアプリケーションに実装できるようになります。
とRDSを紹介しています。
確かにMySQLやPostgreSQLをEC2インスタンスにインストールすれば、データベースをAWSインフラ環境へ導入することはカンタンです。
しかし、データベースとはいわばWebサービスにおけるコアといってもいいほど重要なシステムであり、強靭な高可用性や耐障害性が求められます。
それらを実現するのが、このRDSというサービスなのです。
RDSは、データベースが止まらないように設計・運用する上で大変活躍してくれます。
ここでRDSのメリットをまとめます。
これから、なぜこのようなメリットを実現できるのかについて専門用語の解説を踏まえてお話していきます。
まずは、RDSが強靭な高可用性や耐障害性を実現するための構造であるMultiAZ構成(マルチアベイラビリティゾーン構造)について解説します。
結論から述べると、MultiAZ構成とは以下の図のように複数のデータセンターであるAZ(Availability Zone)を対して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インスタンスへ接続できないという問題が発生しますので注意してください。
フェイルオーバーが自動的に行われるには以下のような条件があります。
また、手動でテストを行うには、
といった手順で設定を行うことができます。
RDSは、ECと同様にインスタンスタイプをスケールアップすることができます。(RDSのインスタンスタイプ一覧はコチラ)
CPUのスペック不足を感じたら、コンソールからボタン1つでインスタンスタイプの変更が可能なのです。
しかし、インスタンスタイプの変更には必ずインスタンスの停止が必要なので必然的にフェイルオーバーが行われます。
したがって、サービス自体を一時的に停止させなければいけなくなるため、サービスをリリースする前にできるだけスケールアップの必要がないようなインフラ設計を心がけましょう。
AWSを利用する上で一番シビアに考えなければいけない点が料金についてだと思います。
ここでは、Amazon RDS for MySQLの例にしてカンタンな料金体制について説明していきます。
Amazon RDS for MySQL以外についての料金体制もAWS公式-Amazon RDS の料金に書かれているので参考にしてみてください。
まず基本的にRDSにかかる費用は、
の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ヶ月
【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
【AWS】Auto Scalingする前に知っておくべき7つのこと
Amazon EC2 Auto Scaling(オートスケール)を使用すると、CPU使用率等に応じてEC2の台数を自動的に増減できます。ここでは、初心者の持つ疑問を通し...
WordPressの基本構造を理解してオリジナルテーマを作ろう(後半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやstyle.css)の役割やファイル構造を理解して、どのようにオリジナ...
WordPressの基本構造を理解してオリジナルテーマを作ろう(前半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやfront-page.php)の役割やファイル構造を理解して、どのようにオ...
【Heroku入門】無料枠サーバーを24時間スリープさせない方法
フリープランのHerokuサーバーでは、30分以上アクセスがないと自動的にスリープしてしまいます。ここでは、Herokuサーバーを寝かせない方法につい...
【入門編】Laravelのディレクトリ構造とMVCの処理の流れを理解する
Laravel初心者が学習する際にわかりにくいLaravelのディレクトリ構造を具体的な例を交えて解説します。MVCの基本であるビュー、モデル、コントロー...
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発
誰でも簡単にLINEBotをpythonを使ってHeroku環境で開発できる方法を解説します。ここでは、LINE Messaging APIを用いることでおうむ返しをするBot...
AWSでWebサーバー構築!踏み台サーバーでセキュアなネットワークを構築する(第5回)
連載の第5回です。メインEC2に対して直接SSH接続できる状態というのは、セキュリティの観点からあまり望ましくありません。MySQLやEBSが紐づいたメ...
AnacondaでのTensorFlow環境構築と基礎的な使い方
Anaconda(アナコンダ)のインストールからJupyter notebook(ジュピターノートブック)とTensorFlow(テンサーフロー)の基本的な使い方を初心者...
脱初心者!MNIST beginnerに隠れ層を加えたニューラルネット解説
TensorFlowのチュートリアルであるMNIST beginnerの応用して、隠れ層と活性化関数を加えたニューラルネットワークで手書き文字識別を解説します。...
AWSでWebサーバー構築!Apache2.4, PHP7, MySQLの導入と初期設定(第4回)
連載の第4回です。今回は作成したEC2インスタンスにWebサーバーとしての機能を持たせるため、Apache2.4のインストールおよびhttpd.conf等の各種設...
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
連載の第3回です。前回作成したVPC・サブネットにおいて、セキュリティーグループに保護されたEC2インスタンスの作成・設定およびSSH接続の確立ま...
初心者必読!MNIST実行環境の準備から手書き文字識別までを徹底解説!
Pythonによる機械学習をプログラミング初心者にもわかりやすいように、TensorFlowチュートリアルのMNIST beginnerを使って、手書き文字(MNIST)識別...
AWSでWebサーバー構築!専門用語の解説とVPC環境を構築する手順(第2回)
連載の第2回です。AWSにてVPCネットワークを構築してWebサーバーを設置・運用するためには、AWS内で利用される重要単語について正しく理解しておく...
知識ゼロで機械学習・AIを理解するために必要なニューラルネットワークの基礎知識
機械学習・AIを理解するために必要なニューラルネットワークの基礎について、これから機械学習を勉強したい人、プログラミング未経験の人にもわか...
Canvaで簡単におしゃれなアイキャッチ画像を作ろう!使い方を徹底解説!
PhotoshopやIllustratorを使えなくてもCanvaなら誰でも簡単におしゃれなアイキャッチ画像が作れます。豊富なデザインテンプレートを組み合わせるだ...
プレビュー機能付きの記事編集画面の作り方(Laravel5)
記事編集フォームにはプレビュー機能の実装が必須です。記事を保存する処理とプレビューを表示する処理を共存させるにあたり、ボタンをクリックし...
AWSでWebサーバー構築!VPC設計に必要なIPアドレスとサブネットの基礎知識(第1回)
連載の第1回です。AWSのVPCネットワークを設計して実際に構築するためには、IPアドレスの基礎を理解することが非常に大切です。EC2 Webサーバーを...
MIYABI Labホームページを製作しました
様々な理由でプログラミングの勉強を困難だと感じてしまっている方のお役に立てれば嬉しいです。これからも小さなWebサービスを作り続けていき、技...
ゆざ、株式会社PLANを卒業します。
2年間インターンとしてお世話になった株式会社PLANを卒業します。AWS,Laravel,Pythonなどの技術的なことだけではなく、エンジニアとして、社会人と...