【AWS】データベースサービス

# データベースサービス

## AWSのデータベースの特徴

通常業務で利用するデータベース（以下DB）サーバーを設計／構築／運用する際には次の作業が必要になる

- DBサーバー用のハードウェアの要件定義
- ハードウェアの調達／DBのインストール
- 構築時／運用開始後のパッチ適用
- DBのバックアップ／リストア設計と実作業
- DR対策

:::note info
AWSのマネージド型DBサービスは上記の作業をAWSに任せることができる
:::

### ◉マネージド型DBサービスの特徴
- **最初からDBがインストールされている**
- DBサーバーが動作しているOS／DBソフトウェアの**パッチ適用はAWSが行う**
- **自動バックアップ**が可能
- DBの**スケールアップ／スケールアウトはAWSの機能を利用できる**

***

## Amazon Relational Database Service（RDS）
- マネージド型のリレーショナルDBサービス
- **ACID特性**を備えていないといけない

| 特性 | 説明 |
|:-:|:-:|
| Atomicity（原子性）  | トランザクション（データ処理）は**全て正常に実行 or 無効**のどちらか  |
| Consistency（一貫性）  | DBに書き込まれたデータが定義されている**全てのルールと制約**に従っているか  |
| Isolation（独立性）  | 各トランザクションが**独立し、並行処理**していること  |
| Durability（耐久性）  | トランザクションの正常完了後、DBに加えられた**全ての変更が永続的な状態**であること  |

#### ◎サポートしているエンジン
- Amazon Aurora
- Postgre SQL
- MySQL
- MariaDB
- Oracle DataBase
- Microsoft SQL Server

### ◉Amazon Aurora
- Amazon独自のリレーションDBサービス
- Postgre SQL／MySQLと互換性があり、比較して性能も良い

[![Image from Gyazo](https://i.gyazo.com/2e34925f095b3a72fb29f25c4c2bae5d.png)](https://gyazo.com/2e34925f095b3a72fb29f25c4c2bae5d)

- SQL処理を行う**DBインスタンス**とデータを格納する**クラスターボリューム**に分かれている
- クラスターボリュームは3ヶ所のAZに存在する
- 3つのAZのうちひとつのDBインスタンスはプライマリDBインスタンスと呼ばれ、データの読み取り／書き込みを行う
- その他2つのDBインスタンスはAuroraレプリカと呼ばれ、データの読み込みを行う

:::note info
合計で3つのAZの6ヶ所に保存されるため、障害発生時にダウンタイムが発生することがほとんどない
:::

### ◉RDSの特徴
#### ◎パッチ適用の管理負荷軽減
曜日／時間帯を時間帯をメンテナンスウィンドウから指定することで、AWSが自動でパッチ適用する

#### ◎バックアップとリストア
- 標準で**1日1回自動バックアップ**が実施され、**DBとトランサクションログ**を取得
- トランザクションログは5分ごとにS3に保存されている
- DBのバックアップはストレージボリュームの**スナップショット**を作成し、**DBインスタンス全体**を取得
- 最大35日分を保存することができる

[![Image from Gyazo](https://i.gyazo.com/385d5f525354994dfde13e6890c7eef1.png)](https://gyazo.com/385d5f525354994dfde13e6890c7eef1)


##### RDSの復元方法
- 通常のリストア
**スナップショット**からDBインスタンスを復元
[![Image from Gyazo](https://i.gyazo.com/68db95d42bfb55e3123709109d3f8f35.png)](https://gyazo.com/68db95d42bfb55e3123709109d3f8f35)

- ポイントインタイムリカバリ
**バックアップのDBとトランザクションが残っている範囲内の特定日時時点**にデータを復元
[![Image from Gyazo](https://i.gyazo.com/db264a02b3a34e24defcd1a4794501d6.png)](https://gyazo.com/db264a02b3a34e24defcd1a4794501d6)

:::note info
復元すると新しくインスタンスを作成／起動することになるため、アプリケーション側で新しいエンドポイント（ホスト名）に接続するように修正しなければいけない
:::


### ◉マルチAZ
- RDSを**複数のAZに構築すること**
- Aurora以外のRDSのDBはマルチAZのDBインスタンスを作成すると、**マスターDBインスタンスを自動作成**して異なるAZにあるDBインスタンスにデータを複製する
- **耐久性と可用性**が向上する

:::note info
・シングルAZはDBに障害が発生した時、バックアップを利用して復元する必要がある
・マルチAZはスタンバイDBへの切り替えが自動で開始するため、データの損失がほぼない
:::

[![Image from Gyazo](https://i.gyazo.com/03317824f2d3f3a67f2197f129e5b3e9.png)](https://gyazo.com/03317824f2d3f3a67f2197f129e5b3e9)


### ◉リードレプリカ
- マスターDBと同じDBを複製し、**読み取り専用**として構築したもの
- マルチAZや異なるリージョン間で構築できる
- マスターDBとの同期処理は**非同期**で実行される

[![Image from Gyazo](https://i.gyazo.com/1fe0dc953f1d678c21a59ca3e7f91b58.png)](https://gyazo.com/1fe0dc953f1d678c21a59ca3e7f91b58)

:::note info
マスターDBとリードレプリカの構成にすることで、読み取り要求と書き込み要求の処理を分離でき、パフォーマンスと耐久性が向上する
:::

### ◉Aurora Serverless
- 通常のAuroraと異なり、常にDBインスタンスが起動しているわけではなく、SQLのリクエストを受け取ってからインスタンスが起動する
- 負荷に応じて、DBインスタンスを自動でスケールする

:::note info
利用頻度があまり高くないアプリケーション／負荷が一定ではないアプリケーションのデータ格納に適している
:::

***

## Amazon DynamoDB
- マネージド型の**NoSQL**データベースサービス
- 構造化データ以外の**半構造データ／非構造データ**を扱うことができる

| データの分類 | データ構造の種類 | 詳細 | 説明 | データ／ファイルの例 |
|:-:|:-:|:-:|:-:|:-:|
| リレーショナルデータ  | 構造化データ  | データ管理する構造を決め、その構造に合わせて格納したデータ  | 企業の基幹システムなどで管理されているデータ  | RDB／Excel  |
| 非リレーショナルデータ  | 半構造データ  | 非構造データを管理できる柔軟性のある構造を用意し、その構造に格納されたデータ  | システムのログ／IoTデータ／位置情報／SNSデータ／設定ファイルなど  | LOG／JSON／XML  |
| 非リレーショナルデータ  | 非構造データ  | 構造が定義されておらず、データの関係をモデルに当てはめることができないデータ  | テキストファイル（メモ書き）／音声データなど  | TXT／MPEG  |

### ◉キーバリュー型データモデル
- **キーとバリュー**からデータが構成され、書き込むときはセットで保存される
- データを呼び出すときは、**キーを指定してバリューを取り出す**

### ◉マルチAZ
DynamoDBではデータは**自動的に3ヶ所のAZに保存される**

[![Image from Gyazo](https://i.gyazo.com/14c763aaa82e32836c6f693dee3a9248.png)](https://gyazo.com/14c763aaa82e32836c6f693dee3a9248)

### ◉結果整合性モデル
- 書き込み処理を行なったデータは3ヶ所のAZに分散／保存されるが、**書き込み完了に時間差がある**
- タイミングによって、読み込んだデータに**最新の情報が反映されていないAZ**からデータを取得してしまう場合がある
- **Consistent Read（読み取り一貫性）**というオプションで書き込みが反映された**最新データを読み取ることができる**

:::note info
従来のリレーショナルデータはACID特性の中のConsistency（一貫性）を保証することができる
:::

### ◉Amazon DynamoDBグローバルテーブル
- 複数リージョンに配置しているDBテーブルでデータの整合性をとるサービス
- DynamoDBのテーブル作成時に**共通の型（グローバルテーブル）**を選択し、複数リージョンに同一テーブルを作成する

:::note info
全てのテーブルがマスターテーブルのため、どのリージョンのテーブルに対してデータを変更しても、他のリージョンのテーブルに対して同期が行われる
:::

### ◉Amazon DynamoDBストリーム
- DynamoDBのテーブルに対して行われたデータ変更（追加／更新／削除）の履歴情報をイベントとして検出し、24時間保持する機能
- DynamoDBに負荷をかけずに別途集計／分析処理を行いたい場合
- データの変更発生時に迅速にシステム管理者にメール通知したい場合

:::note info
結果整合性モデルのため、アプリケーション稼働中は常にDynamoDBに負荷がかかる
:::

### ◉DynamoDBの課金
課金金額は、**キャパシティモード**と呼ばれる設定によって異なる

| キャパシティモード | 説明 | 適したユースケース |
|:-:|:-:|:-:|
| オンデマンド  | 課金は実行したデータの読み書きに対して発生／事前のパフォーマンスの予測や設定は不要  | ワークロードやトラフィックの予測がつかない  |
| プロビジョニング済み  | 事前に１秒あたりの読み書きの回数を予測／Auto Scalingを使用してテーブルのキャパシティを自動調整する  | DBにアクセスするトラフィックの予測ができる  |

***

## Amazon Redshift
- BIツールなどを利用した大量のデータの集計／分析に向いている**データウェアハウスサービス**
- **ノード**と呼ばれているコンピューティングリソースの集合で構成されている
- **リーダーノード**が処理を受け付け、**コンピュータノード**に処理を依頼する
- ノードの集まりを**クラスター**という

[![Image from Gyazo](https://i.gyazo.com/d8b9364023d3024b3621265f03d18a96.png)](https://gyazo.com/d8b9364023d3024b3621265f03d18a96)

:::note info
BI（Business Intelligence）
経営上の意思決定に役立てる手法／技術
:::

### ◉スナップショット
- Redshiftは、スナップショットを作成することでバックアップされる（ポイントインタイムバックアップ）
- 8時間ごと、もしくはノードあたり５GBのデータ変更があったときに自動バックアップ
- 自動取得したスナップショットの**保存期間が過ぎると削除される**ため、**永続的にバックアップを保存したい場合は手動でスナップショットを取得する**

#### ◎クロスリージョンスナップショット
- スナップショットの格納先は標準でRedshiftのクラスターが配置されているリージョン
- **別にリージョンにコピーするように設定できる**
- ひとつのリージョンに障害が発生しても、別のリージョンのスナップショットからクラスターを復元できる

***

## Amazon ElastiCache
- インメモリDB（**キャッシュ用のDB**）
- 高スループットかつ低レイテンシーな処理が可能

### ◉一般的なWebDBアプリケーションの構成イメージ
[![Image from Gyazo](https://i.gyazo.com/84878156d7f25f8bc3731d9ad2866869.png)](https://gyazo.com/84878156d7f25f8bc3731d9ad2866869)

:::note info
データのアクセス時に常にDBに対するクエリが発生し、負荷がかかる
:::

### ◉ElastiCacheの構成
[![Image from Gyazo](https://i.gyazo.com/b21c857519563f33b37f834d8fae4efd.png)](https://gyazo.com/b21c857519563f33b37f834d8fae4efd)

:::note info
DBサーバーの負荷軽減とパフォーマンス向上を実現できる
:::

***

## その他のDBサービス
### ◉Amazon Naptune
高速かつ信頼性の高いフルマネージドな**グラフDBサービス**

#### ◎グラフDB
- NoSQLに分類される
- モノ同士のつながりを表現するネットワーク上のデータ構造

#### ◎グラフの要素
- ノード：データの要素
- エッジ：ノード間の関係
- プロパティ：ノードとエッジの属性情報

:::note info
人と人とのつながり（SNS）や乗換案内など、ノード間の関係性の表現や計算に適している
:::

### ◉Amazon Athena
- サーバーレスのクエリサービス
- S3をデータストアとして使用しており、標準SQLを使用してS3内のデータを分析することができる
[![Image from Gyazo](https://i.gyazo.com/6a9b05a2d1c3a6fa155849098c0967e7.png)](https://gyazo.com/6a9b05a2d1c3a6fa155849098c0967e7)

### ◉Amazon QuickSight
-　フルマネージド型のBIサービス
-　DBサービスのRDS／RedshiftやDB以外のS3／Athenaなとど連携してデータを**ダッシュボードで可視化することができる**
-　AWS以外の外部DBやファイルデータソースなどの可視化も可能

***

#### 参考
https://aws.amazon.com/jp/rds/aurora/serverless/

https://aws.amazon.com/jp/dynamodb/faqs/

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GlobalTables.html

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.html

https://aws.amazon.com/jp/redshift/faqs/?nc=sn&loc=5&dn=4

https://aws.amazon.com/jp/elasticache/

https://aws.amazon.com/jp/neptune/faqs/

https://aws.amazon.com/jp/athena/faqs/?nc=sn&loc=6

https://aws.amazon.com/jp/quicksight/resources/faqs/