Amazon RDSをデータベースの基礎からまとめてみる
目次
こんにちは。
AWSについて勉強しています。
今回はAWSのRDB(リレーショナルデータベース)サービスRDSについてまとめてみました。
RDSとかRDBとか名前が似てるので混乱しますね。
そもそもAWSって何?という方はこちらの記事を御覧ください。
また、AWSのクラウドやサーバーがどういうものか具体的なイメージを知りたい方はこちらへどうぞ。
AWS公式ドキュメントでは概念的な言葉でわかりにくい表現がどうしてもあります。このブログではふわっとした言葉を極力なくして、わかりやすく伝えていこうと思います。
RDSって何だ
RDSはAWSの中で最もデータベースっぽいデータベースです。
いわゆるリレーショナルデータベース(RDB)ですね。
リレーショナルデータベースというのは、Relational、つまり関係性を持っているデータベースのことです。
関係性とは何かというと、ある共通の情報をもとに複数のデータが結びついている、ということです。たとえば顧客のidナンバー(=共通の情報)をもとに、顧客の名前などの個人情報や、注文履歴といった複数のデータを参照することができる、といったような構造のことです。
なので、リレーショナルデータベースで管理したいデータというのはこのような決められたルールに従った構造を持っているんですね。(このようなデータベースを設計する人が決めた構造のことをスキーマとか呼んだりします。)
このような決まったルールの構造を持っていると何が良いかと言うと、データの入力形式で間違いが起きにくい、データの参照の仕方が決まっているので探しやすい、一括で処理(集計など)しやすい、といったようなことがあります。
ちなみにデータの検索や処理を行うのは決まった言語(言葉のルール)があります。SQLというものですね。SQLはプログラム言語に近いですが、データを取り出すための言語なので、クエリ言語といったりします。クエリというのは、データを呼ぶことですね。Queryは問い合わせのことです。SQLは文字列で、それを使うことをクエリを叩くとか言ったりします。これは実際に人がキーボードを叩くからですかね。
かな〜り脱線しながら説明しましたが、このRDSというのはリレーショナルデータベースであり、SQLで操作することができるものです。
なぜデータベースサービスが必要か
データベースって、つまり表です。テーブルとか言ったりもしますね。
それってエクセルの表でいいじゃん!ってなりますが、エクセルだと困ることがあるのです。
それは、データの量が大きくなると、読み込みに時間がかかって処理が大変になることや、複数人で作業するときに同時作業ができない、といったことです。エクセルで何万件のデータを扱うって、実際やってみると結構大変ですよ。重くて開くまでに時間もかかりますしね。 非常にストレスフルです。
データベースというのはこのような問題を解決してくれます。ネットワーク上にデータベースのソフトウェアが入った専用のサーバー、いわゆるデータベース・サーバーを用意したとします。このような形でデータベースが置かれていると、特定のデータを参照したい、追加したい、集計したい、といった目的に応じて、クライアント、つまりPCを使っている人々がいつでも自由に素早くクエリすることができます。
SQLを使えば、「このテーブルの、この顧客の、この月の請求金額の合計を出したい!」みたいなときに、英語の短文ような2~3行の文字列を叩くだけで素早く結果を読み出すことができます。エクセルだと、まず巨大なファイルを開いて、列を目で探して指定して、そこから抽出・集計作業が始まりますよね。う〜ん、考えただけで生産性が低下しそうです!
ですが、このような便利なデータベースを自分で用意しようとすると、まずサーバーを用意して、データベースソフトをインストールして、ネットワークをつないで、と色々準備が大変ですよね。
RDSはマネージドサービス、つまりこのようなマシンの準備やソフトの管理をすべてAWSで代行してくれるので、ユーザーはAWSのページからボタンをポチってすることで、煩雑な準備なしでネット上にあるデータベースを即座に借りることができるのです。さらにアクセスの量が増えたら、自動で量を増やしてくれるだけでなく、障害対策用にバックアップも自動でとってくれます。あら便利。
面倒な準備なしで手軽に利用する需要があるために、データベースサービスが必要なのです。
RDSの特徴
ここからが本題ですね。RDSの注目すべき特徴は、以下のようなものがあります。
- フルマネージドサービス
- 従来のデータベースとの互換性
- 容易なスケーラビリティ
- マルチAZ構造による高い可用性と信頼性
互換性
データベースのソフトウェアというのは世の中に色々あって、微妙に使用するSQL言語にクセ(方言)の違いがあったりします。
なので、今まで使っていたデータベースのクセを直さずに移行したい、というときに、色々互換性オプションがあるのは嬉しいですね。
選択肢は6種類で、MySQL、MariaDB、PostgreSQL、Oracle、Microsoft SQL Server、Auroraがあります。
AuroraというのはAmazon独自の高性能なデータベースタイプですが、それもMySQLとPostgreSQLに互換性があります。
スケーラビリティ
スケーリング、というのは、負荷に応じて数を増やしたり減らしたり、性能を上げたり下げたりすることで適切なサイズ感を保つことです。スケーリングできることをスケーラビリティといいます。
RDSのようなリレーショナルデータベースは、マシンの性能やストレージの容量サイズによってスケーリングします。これを、垂直スケーリングといいます。(逆に、マシンの数を増やしたり減らしたりすることを水平スケーリングといいます)
マネージドサービスであるRDSはこのようなスケーリングも自動でやってくれるんですね。
Storage Auto Scalingという機能を有効にすると、空き容量がなくなったタイミングで自動拡張してくれます。これはダウンタイム、つまり拡張時の待機時間がないので、とてもスムーズに拡張されるようです。ただし1日に拡張できる回数が決まってるので、ちょっとずつ増える場合はよいのですが、スパイク、つまり一気に容量負荷が高まることがわかっている場合は、手動で増やしたほうが良いですね。
また、RDSはリードレプリカというRead(読み込み)負荷に対するスケーリングを目的としたレプリケーション(複製)の機能があります。レプリカは最大で5個(Auroraは12個)を作ることができるようです。
リードレプリカについて詳しくはこちら。 Amazon RDS リードレプリカ【AWS公式】
マルチAZ構造
AZというのはこちらの記事でもご紹介したとおり、データセンターの集まりのことです。複数のAZにレプリカ(複製)を用意する構成をとっているので、災害対策がバッチリということですね。
こちらはリードレプリカと違って、可用性(つまり途切れることなく使い続けること)の向上を目的とした機能です。
普段はプライマリと呼ばれるメインのデータベースサーバーにアクセスして使います。もしこれが災害などで壊れたら、自動でフェイルオーバー、つまりサブ(スタンバイ)に切り替えてくれるので、災害や障害を意識せずにそのまま使い続けることができます。
リードレプリカとの違いは、全てのレプリカに読み取りアクセス可能ではなくプライマリにのみアクセスすること、必ず2つ以上のAZに展開されること、ですね。(ちなみにリードレプリカは同じAZでも異なるAZ、リージョンでも配置可能です)
気になる料金
気になる料金ですが、東京リージョンでMySQLを使った場合、一番小さいインスタンス(db.t3.micro)のシングルAZ配置だと一時間0.026USD。
ということで大体1時間あたり3円ですね。
マルチAZ配置だと大体倍になります。
裏でEC2インスタンスを立ち上げているので時間課金なんですかね。ちなみにリザーブドインスタンスも選択できるので、年単位での契約など、長期で使いたいときはお得にできたりします。
EC2やリザーブドインスタンスについてはこちらの記事にまとめています。
料金はこちらで詳細が確認できます。 Amazon RDSの料金【AWS公式】
作成画面とオプション項目
こんな画面から使い始めます。簡単に作成できそうです。

この下には以下のようなオプションが続きます。
- DBのバージョン
- テンプレート(高可用性のある本番用/最低限の開発・テスト用/無料枠)
- DBインスタンスの識別子(名前)、認証情報(password)
- DBインスタンスサイズ
- ストレージ、自動スケーリングの有効化としきい値(GiB)
- マルチAZ配置
- インスタンスが配置されるVPC、サブネットグループ、セキュリティグループ
- 認証をpasswordのみで行うか、IAM認証も使うか
- 追加設定(自動バックアップ、暗号化、モニタリング) ... デフォルトで有効です。
最後にオンデマンド料金の概算見積もりが出ますが、デフォルトでおよそ1,055USD/月でした。11万円か〜。かなり高可用でインスタンスも良さげなタイプなので、しっかり使うとこれくらいかかるんですね。
VPCやセキュリティグループは別の記事にまとめる予定です。
IAM認証は別の記事にまとめる予定です。
まとめ
というわけで、AWSのRDB(リレーショナルデータベースサービス)、RDSについてまとめてみました。
データベースをよく知らない、という方にもなんとなくわかってもらえたら良いな〜と思います。
AWSのRDBにはクラウドでつかうための進化版であるAuroraもありますが、まず手頃にはじめる場合の選択肢としてはRDSは優秀なマネージドサービスだと思います。
参考記事
日々AWSのインフラが進化しているようです。最新情報はこちらで。