Amazon RDS

##1.Amazon Relational Database Service（RDS）とは##
クラウド上で提供するRDBSサービスです。

- RDBSとは、データ間の関係性が定義されたデータを取り扱う一般的なDBシステムです。
- 列と行がいくつかのテーブルで定義されていて、テーブル間のリレーションが設計されている。
- データ操作にSQLを利用。

会計データ/顧客データといった構造化データに向いている。

[Amazon RDS の特徴](https://aws.amazon.com/jp/rds/features/)
↑のようなことはAWSが管理してくれるマネージド型なので、開発者はアプリケーション開発に集中できる。



##2.特徴や注意##

- 特徴
 - RDBMSのインストール作業などの運用の負荷が劇的に削減できます。
 - 障害時や誤作動が起きた際に、5分前の状態に戻すことが出来ます。

- 注意
 - RDSインスタンスに、SSH接続はできません。（パラメータグループを使います。）
 - DB インスタンスは最大 7 日間停止できます。DB インスタンスは、手動で起動しないで 7 日間が経過すると、自動的に起動します。
 - EC2のようにオートスケールはできない。DynamoDBのようにキャパシティを指定するだけでオートスケール可能なDBを選択する必要がある。
 - スケールアップ時はインスタンス再起動によるダウンタイムが発生する。ダウンタイムの少なAuroraやDynamoDBのようにキャパシティを指定するだけでオートスケール可能なDBを選択する必要がある。
 - ストレージサイズを増やすことはできますが、減らすことはできません。
 - 途中でインスタンスタイプを縮小することが可能です。
 

##3.DBエンジンの種類##
サポートしているDBエンジンは [製品の詳細](https://aws.amazon.com/jp/rds/) を確認しましょう。



##4.RDBMSのライセンス##
MySQLとPostgreSQLはもともとフリーのソフトのためライセンスなどは特に用意すること無くご利用いただけますが、OracleとSQL Serverに関しては、利用をするためにライセンスが必要です。
しかし、RDSはそれぞれの時間単価の中にこのライセンス量も含まれているので、ユーザーがライセンスを用意する必要なくご利用できます。(OracleはBYOLでも利用することが可能です。)
さらに、ライセンスが時間単価に含まれているので、ユーザーは、いつでも利用を停止することが出来ます。



##5.インスタンスタイプ##

| 種類 | 特徴 |
|:-----------------|:------------------|
| R3 |メモリに特化したインスタンスで通常のM3インスタンスより大きいメモリを積んでおります。|
| M3|スタンダードなインスタンスで、コア数、メモリ共に普通の一般的なインスタンスです。 | 
| T2|ミニマムなデータベースに最適なインスタンスになっております |



##6.メンテナンス##
新しいバージョンが出たときにMySQL を自動でアップグレードして自動で再起動してしまいます。
重要なウェブサイトやサービスで何の予告もなくデータベースに繋がらなくなったら大変ですので基本的に無効化しておきます。
参考：[Amazon RDS DB インスタンスのメンテナンス](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html)



##7.自動バックアップとスナップショット##

その名の通り、自動でバックアップをしてくれる機能と手動でスナップショットをしてくれる機能がある。また、このスナップショットはリージョン間を移動することもできます。
なお、RDSのインスタンスを削除した際に、自動でスナップショットをとった場合は自動でスナップショットが削除されますが、手動でスナップショットを作成した場合は自分で削除する必要があります。
Single-AZ DB の場合は、スナップショット取得時はI/Oが短期間停止します。マルチ AZ DB インスタンスの場合は複製されているスタンドバイ側から取得するため影響を受けません。 

↓手動
![スクリーンショット 2019-02-22 20.47.02.png](https://qiita-image-store.s3.amazonaws.com/0/280929/b37df5ab-c40b-9060-5bc1-63c16570cfcf.png)

参考：[Amazon RDS DB インスタンスのバックアップと復元](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_CommonTasks.BackupRestore.html)



##8.VPCのAmazon RDS##
一般的にプライベートサブネットに配置するのが基本です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/35c404b2-8702-b75d-e541-ace5f21eda7f.png)



##9.マルチAZ##
別のAZにスタンバイコピーされることで、障害が発生した場合にスタンバイに切り替わる。
なお、下記の図では、EC2からRDSに接続する際はIPアドレスではなく、エンドポイントで接続される。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/a22a30d2-ad33-ee14-2643-ade6377d1504.png)



##10.リードレプリカ##
読み取り専用のレプリケーション（複製して同期）を作成できる機能です。
この機能を使うことで、親機に読み取りにかかる負荷を軽減できます。
これにより、親機のパフォーマンスが向上します。
Multi-AZ構成の際にはスレーブのDBインスタンスに対して利用者が直接アクセスすることはできませんでしたが、リードレプリカの場合は直接アクセスすることが可能です。
読み込みが多いアプリケーション等に有効ですが、非同期のため常にマスターと完全に内容が一致しているわけではなく常に最新のデータが取得できるということではありませんので（レプリケーションラグ）、マスターの負荷分散用として利用するのがよいかと思います。
更新系はマスターで、参照系はレプリカでという使い方が想定されます。なお、Multi-AZ機能との併用も、もちろん可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/280929/d127f39c-dcad-0dbc-a481-ba9de1e0fff4.png)

- 注意点
 - 自動バックアップを有効にしておく必要があります。リードレプリカを作成する際、Amazon RDS はソース DB インスタンスの DB スナップショットを取得し、レプリケーションを開始します。 そのため、データベースの自動バックアップが無効になっているとリードレプリカの作成ができません。

- レプリケーション数
 - Amazon Aurora レプリカ 15
 - MySQL レプリカ 5
 - [Oracle でのリードレプリカの制限](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) ：
Oracle リードレプリカは、Oracle バージョン 12.1.0.2.v10 以降の 12.1 バージョンと、すべての 12.2 バージョンでのみ使用できるなど、制約があるので注意。

- Replica lag メトリクス
 - プライマリインスタンスからレプリカへの更新時の遅延(ms)が確認できる。

##11.料金##

- サーバの稼働時間、時間単位で請求されます。
- EC2のようにオンデマンドデータベースインスタンス（従量課金）、リザーブドデータベースインスタンス（前払い）があります。
- データベースの物理的キャパシティー(エンジン、サイズ、メモリクラス)により課金される金額に影響します。
- 冗長化により複数のDBインスタンスを立ち上げた場合、それぞれのDBインスタンスに対して課金されます。
- DBはストレージを使うため、ストレージに対しても料金が発生します。プロビジョニングされているデータベースストレージの最大100%のバックアップストレージについては料金は発生しませんが、DBインスタンスを削除してしまった後、バックアップだけ残しておくと、バックアップストレージの料金がGB/月単位で発生します。  
- 単一AZ、マルチAZに配置するのかによって料金が変わってきます。
- データ転送は受信は無料ですが、送信は発生します。

**[Amazon RDS for Oracle の料金](https://aws.amazon.com/jp/rds/oracle/pricing/)**
オンデマンド DB インスタンス (ライセンス込み)　と　オンデマンド DB インスタンス (自分のライセンス使用 – BYOL)　があり、ライセンスを持ち込むことが可能です。
ライセンスを持ち込んだ場合、料金は安くなります。



##12.EC2 にインストールするか？ RDS を使うか？##
AWS でMySQL を使いたいとき、EC2 でインスタンスを作成してyum でMySQL をインストールする*1方法と、Amazon RDS というサービスを使う方法があります。
自力でインストールするのではなくRDS を使うことで、データのバックアップや脆弱性パッチの適用といった色々な面倒ごとをRDS にお任せできます。一方でRDS というサービス上で用意されていない機能は、たとえMySQL で実装されていても使えないため自由度は若干下がります。
旅行代理店のパック旅行を申し込めば、飛行機のチケットを取ってホテルの予約してレンタカーを借りて・・・といったこまごましたことを自分でしなくて済むから楽だけれど、代わりにできることや行けるところは限られていて自由度が下がる、というのと同じです。

↓RDSはバックアップやバッチ当てなどまで行ってくれる。
![スクリーンショット 2019-02-19 18.23.19.png](https://qiita-image-store.s3.amazonaws.com/0/280929/44209c9b-ed82-26a9-c221-a30d8b970325.png)


##13.暗号化##
後でできないとか色々制約があるので注意しないといけない。
[Amazon RDS の暗号化された DB インスタンスの制限事項](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Overview.Encryption.html)

なお、途中から暗号化をしたい場合は、スナップショットから復元し、元のDB インスタンス名を新しいDBインスタンス名に変えることでエンドポイントを変更することなく維持できるようになる。
[暗号化していないRDS DBインスタンスを暗号化する](https://dev.classmethod.jp/cloud/encrypt-unencrypted-rds-db-instance-ja/)


##14.パフォーマンスインサイト##
Performance InsightsはRDSで時間がかかっている箇所を可視化してパフォーマンス確認を行うためのツールです。
サポートしていないインスタンスタイプもあるのでドキュメントを確認すること。
[Amazon RDSパフォーマンスインサイトの使用](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PerfInsights.html)


##15.イベントサブスクリプション##
RDSのイベントが発生したときに、通知を受け取ることができる。

例えば、下記は”スナップショットが作成”された時に通知する。
[Amazon RDS イベント通知の使用](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_Events.html)


##16.メンテナンスウィンドウ##

**マルチAZでの動作**
1.スタンバイでメンテナンスが実行される
2.スタンバイをプライマリに昇格させる
3.元のプライマリでメンテナンスが実行される


##17.ログとイベント##

[[Feb 19, 2021]Amazon RDS がマルチ AZ 配置用の新しいイベントを発行](https://aws.amazon.com/jp/about-aws/whats-new/2021/02/amazon-rds-publishes-new-events-multi-az-deployments/)
マルチAZでフェイルオーバーした際、その理由を、イベントログで確認できるようになりました。


##18.RDS Proxy##

アプリケーションとAWS RDS の間に配置され、Proxyとしてデータベースへの接続を効率的に管理してくれるサービス

↓の記事がわかりやすいと思います。

https://note.com/suzuki_k_12/n/n0571f16cbcca#jf0qf

##18.demo##
[マルチAZにしてみた - Amazon RDS](https://qiita.com/leomaro7/items/31fbb157c99a506cdf20)
[Amazon RDS ハンズオン](https://qiita.com/leomaro7/items/f51fdb30bd528fa895db)
[AWS RDS MySQL データベースログファイル](https://qiita.com/leomaro7/items/f42f85e3ee2dfbcef649)
[AWS Secrets ManagerでRDSデータベースのパスワードを管理しローテーションする](https://qiita.com/leomaro7/items/8c12ad53f2f0190ee85b)