・Amazon RDS(Relational Database Service)
RDSは、フルマネージド型のリレーショナルデータベース(関係データベース)サービス。SQLを用いたデータベースの操作が可能。
フルマネージド型とは、データベースのスケーリング(拡張、縮小)、ストレージの拡張、高可用性、バックアップ、OS/データベースソフトウェアへのパッチ、サーバーの電源やメンテナンスなどが管理された状態であることをいう。AWSにおけるフルマネージド型とは、前述の管理がAWSによって行われることを意味します。
RDSを使うことでデータベース管理者はこれらの煩雑な作業から解放され、データベースを効率的に利用することに注力することができます。
ただし、RDSはデータベースが稼働するシステム全体をAWSが管理してくれる代わりに、利用できるデータベースエンジンやバージョンが限定されています。また、データベースエンジンごとに使用が制限されている機能もありますので、利用する際は注意が必要。
・RDSの特徴
(1) 構築・運用負荷の軽減
Amazon aurora、ORACLE、MySQLなどのデータベースのエンジンのほか、インスタンスクラス、ディスクサイズなどを選択するだけで利用可能。
運用時も、データベースのレプリケーション(複製)やバックアップ、スナップショットなど運用に関する操作も上記と同様にGUIによる画面操作が可能。
また、運用中にデータベースの容量が枯渇した場合も、Auto Scaling(自動スケーリング)機能を有効にすることで自動的に拡張。ただし増えたストレージ容量は減らす(ストレージを縮小する)ことはできませんので注意。
・データベースの移行
現在利用しているデータベースをRDSへ移行する際も、できるだけ手間が少ないように考慮されています。
例えばMySQLを利用している場合、自社環境に保存されたバックアップデータを利用して移行が行える等の機能が提供されています。
・スナップショットの共有
RDSでは、データベースを所有しているAWSアカウントとは別のAWSアカウントと、データベースのスナップショットを共有できます。
例えば、AWSアカウントを別に持つ部署でデータベースのコピーが必要だったり、新たに作成するAWSアカウントへデータベースを移行したいような場合は、スナップショットを共有し、共有したAWSアカウントでスナップショットからデータベースを復元するといった運用が可能。
なお、スナップショットが暗号化されている場合は共有先のアカウントへKMS暗号化キーの使用を許可する必要があります。
(2) 高可用性
AZを超えたデプロイメント(マルチAZ)で、自動レプリケーション+フェイルオーバーを実現することができる。
マルチAZでは、プライマリDBインスタンスとスタンバイDBインスタンスを異なるAZに配置することによって可用性を向上させることができる(リージョンは同一)。
バックアップ側のデータベースはスタンバイ状態で常に同期されているため、フェイルオーバーが発生しても情報の取りこぼしはありません。
またフェイルオーバーは自動的に行われ、運用は継続して行えます。データベースを利用しているアプリケーション側からはスタンバイ側へアクセスを切り替える必要もありません。
マルチAZはデータベースのメンテナンス(OSの更新やパッチの適用など)の時にも役立ちます。
RDSはフルマネージド型のサービスのため、メンテナンスはAWSが行います。メンテナンスの実施時には、まれにデータベースインスタンスの再起動を伴う更新が行われることがあります。データベースインスタンスが再起動している間はサービスが停止します。このようなメンテナンスに伴う運用停止を回避するにはマルチAZ構成を組むことが推奨されています。マルチAZ構成を取ることで、AWSが実行するメンテナンスは段階的に実行され運用停止なしにメンテナンスを完了することができます。
1. スタンバイDBインスタンスに対するメンテナンス
2. スタンバイDBインスタンスをプライマリDBインスタンスへ昇格
3. 新スタンバイDBインスタンス(旧プライマリDBインスタンス)に対するメンテナンス
(3) パフォーマンス
RR(リードレプリカ)という、参照専用のデータベースとして動作するレプリカ(複製)を作ることができます。データベースの参照時にかかる負荷が高い場合、RRを最大5台(Amazon Auroraは15台)増設することによってスケールアウト(処理台数の追加)することができる。
マルチAZを利用してRRを複数のAZに分散したり、異なるリージョンに配置することもできる。
RRは、データベースのインスタンスクラス(EC2における"インスタンスタイプ"と同等)を変更することにより、スケールアップ(拡張)、スケールダウン(縮小)も柔軟に行うことができます。
利用者の多いタイミングでデータベースを一時的に拡張し、利用者が少ないタイミングでは縮小するように運用することにより、リソース(CPU、メモリ、ディスクI/Oやネットワークなど)を無用に消費せずに済みます。
※なお、本項で言及しているスケールアップ/ダウンは、データベースそのもののサイズではなく、データベースインスタンスであることに注意。データベースのサイズは拡張は可能ですが、縮小することはできません。
[RDSのストレージタイプ]
RDSのストレージは、基本的には汎用SSDとプロビジョンド(予約済み)IOPSから選択します。
IOPSとはInput Output per Second、つまり1秒間にどれだけI/O(Input/Output:読み取り/書き込み)が行えるかを意味するデータベースの性能指標。
プロビジョンドIOPSを選択すると、予約したI/O性能をAWSが保証してストレージを提供します。予約したI/O性能が保証されるので、汎用SSDではAWS側の混雑で性能がなかなか出なかったりアクセス集中が日に何度も起きたりして自動スケーリングで対応しきれない場合などでも、想定した性能が保たれるというメリットがあります。
両者の性能値:
・汎用SSD: 100~10,000 IOPS
・プロビジョンドIOPS:1,000~30,000 IOPS
(4) セキュリティ
RDSは、Amazon VPC(Virtual Private Cloud:ユーザー用の仮想プライベートネットワーク空間)に対応しています。DBインスタンス作成時にインターネットからの接続をONにしない限りは、VPC内でのみ利用可能なサービスです。
EC2インスタンスからのアクセスを行うパターンでは、RDSのデータベースインスタンス用のセキュリティグループを作成し、EC2インスタンスからのアクセスを許可するルールを作成して接続します。
また、データベースインスタンスは、AWS Key Management Service(KMS)と連携して暗号化を行うこともできます。
データベースインスタンスの暗号化を行うと、バックアップやスナップショット、ログ、RRへも暗号化が行われます。
暗号化を行う場合はデータベースの作成時に指定する。
※データベースの作成後に暗号化を有効にすることはできないので注意。
暗号化されていないデータベースインスタンスを暗号化したい場合は、対象のインスタンスのスナップショットを作成し、スナップショットをコピーする際に暗号化を有効にします。暗号化されたスナップショットを基にデータベースインスタンスを復元すると、暗号化されたデータベースインスタンスが構築されます。
(5) ACID特性
リレーショナルデータベースにはACID特性というものがあります。ACIDとは、原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、耐久性(Durability)を意味する言葉で、更新処理中に中途半端なデータが書き込まれないことや、並行処理がそれぞれ独立して動作する(互いに干渉しない)ことなど、処理の信頼性を保証する性質をいいます。RDSもリレーショナルデータベースサービスですので、ACID特性を持っています。