RDSについて（学習メモ）

## はじめに
SAA試験の学習備忘録として記事にしました。適宜更新していきたいと思っています！
間違いがあればコメントで教えてください。。m(_ _)m

## RDSとは
Amazon Relational Database Service（Amazon RDS）の略でAWSクラウドのリレーショナルデータベースを簡単にセットアップして運用することのできるサービス。
マネージドデータベースサービスであり、ほとんどの管理タスクはAWS側が担ってくれるため、アプリケーションやユーザー管理に集中できる。

以下のDBエンジンをサポートしている。
- Amazon Aurora
- PostgreSQL
- MySQL
- MariaDB
- Oracle Database
- Microsoft SQL Server

## RDSの特徴
### 管理が容易
RDSは、データベースのセットアップ、運用、およびスケールを容易にするフルマネージドサービスである。
バックアップ、自動スナップショット、ソフトウェアパッチの適用、ハードウェアの管理など、多くの管理タスクをAWSが自動化するため、ユーザーはアプリケーションの開発と最適化に集中できる。
### 高パフォーマンスの実現が可能
RDSはさまざまなインスタンスタイプが提供されており、アプリケーションの要求に合わせて性能をカスタマイズ可能。
また、プロビジョンドIOPSストレージを利用することで、高いIO性能を必要とするワークロードを効率的に処理可能になる。
### 高可用性と耐久性
Amazon RDSは、マルチAZ配置をサポートしており、自動フェイルオーバー機能を提供している。
この機能により、データベースの稼働率を維持し、障害時のダウンタイムを最小限に抑えることが可能。また、自動バックアップとポイントインタイムリカバリーにより、データの整合性を確保しやすくなっている。
### セキュリティ
Amazon RDSでは、データの暗号化を簡単に設定することができる。ストレージとバックアップのデータ暗号化が可能で、TLS/SSLを使用してデータ転送中の暗号化もサポートしている。また、IAMと統合されているため、リソースに対するきめ細かなアクセス制御を実現できる。
### 高いスケーラビリティ
Amazon RDSは、ストレージのスケーリングと計算リソースのスケーリングを迅速かつ柔軟に実行できる。
アプリケーションの需要に応じてデータベースインスタンスをスケールアップまたはスケールダウンできるため、過剰なリソースのプロビジョニングやコストの無駄を避けられる。また、リードレプリカを使用してリード負荷を分散させることも可能。
### コスト面の最適化
従量課金モデルを採用しており、使用したリソースに応じた料金が発生する。これにより、必要なリソースのみを利用してコストを効率的に管理することが可能になる。
標準ストレージ（汎用SSD）やプロビジョンドIOPSストレージなど、ワークロードに応じたストレージタイプを選択できるほかにも、リザーブドインスタンスなど長期間の利用が見込まれる場合、リザーブドインスタンスを活用することで、オンデマンド料金に比べて最大約70%のコスト削減が可能。
参考：[Amazon RDS リザーブドインスタンス](https://aws.amazon.com/jp/rds/reserved-instances/)

## その他AWSで用意されているDB
全部はないですが、以下ピックアップします。
### DynamoDB
高速で柔軟なNoSQLデータベースサービス。フルマネージドで、低レイテンシかつ高スループットを提供する。
ドキュメントデータとキーバリューデータの保存をサポートし、スケーラブルな分散型データストレージを必要とするアプリケーションに適している。
サーバーレスであるため、プロビジョニングやインフラ管理の負担がなく、オンデマンドでスケール可能。そのほか、DynamoDB Streamsやトランザクション機能など、より高度な機能も備えている。
### Redshift
高速でフルマネージドなクラウドデータウェアハウスサービス。
大規模なデータ分析を低コストで実現し、ペタバイト規模のデータを高速にクエリできる。標準SQLやBIツールと互換性があり、データレイクとの統合も容易である。さらに、Redshift Spectrumを使うことで、データを移動せずにS3上のデータを直接クエリすることも可能。
### ElastiCache
フルマネージドなインメモリデータストアおよびキャッシュサービス。
低レイテンシで高スループットを必要とするアプリケーションに最適。RedisとMemcachedの2つのエンジンをサポートし、データベースクエリの高速化や、リアルタイムアプリケーションの応答時間短縮に役立つ。

## アーキテクチャ
他にもあると思いますが、マルチAZとリードレプリカをピックアップして整理します。
### マルチAZ
複数のAZにまたがるようにRDSを構築することで、**「高可用性」の実現** を目的としている。
1つのAZのみにRDSインスタンスを配置するアーキテクチャの場合、地震などの災害によりAZに障害が発生するとRDSインスタンスにも影響を与える可能性がありアプリケーションの提供が継続できなくなる。
このようにRDSやEC2などのインスタンスが1台しかないことをシステムの **単一障害点(Single Point Of Failure)** という。
また、**同期レプリケーション（Synchronous replication）** であり、レプリケーションが完了するのを待ってから、クエリ等によるスレーブ（マスターに対して複製されたRDSインスタンスを指す）への書き込み処理を受け付けるため、マスターとスレーブ間の通信の分だけ遅延が発生する。

[![Image from Gyazo](https://i.gyazo.com/460cf57fd7a7a8aef68a7aefc2d73602.png)](https://gyazo.com/460cf57fd7a7a8aef68a7aefc2d73602)
画像引用元：[Amazon RDS のマルチ AZ DB インスタンスデプロイ](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.MultiAZSingleStandby.html)
### リードレプリカ
読み取り専用のDBとしてマスタDBと同じRDSインスタンスを構築することで読み取りスループットを向上させることで**拡張性（スケーラビリティ）の向上** を実現する。
ユーザーのDBアクセス数の増加に応じて、DBの読み取り性能を向上させたい場合に読み取り専用のDBとしてリードレプリカを作成することで対応することが可能になる。
マルチAZの同期レプリケーションに対して、リードレプリカ作成の場合は **非同期でレプリケーションする（Asynchronous replication）** ため、レプリケーションの完了を待たずにスレーブへの書き込み処理を受け付ける。

[![Image from Gyazo](https://i.gyazo.com/e64c2ad5a5712a573d30f6fc7c76dbd1.png)](https://gyazo.com/e64c2ad5a5712a573d30f6fc7c76dbd1)
引用元：[DB インスタンスのリードレプリカの操作](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)