【SAA】Amazon Auroraについて

学習したことをアウトプットするために投稿する。
同じAWS SAA取得を志す方の参考になってくれたら嬉しい。

# 概要<!-- omit in toc -->
Amazon Auroraは、Amazon RDSの一種であり、フルマネージド型のデータベースサービスである。既存のRDBMSからパフォーマンス向上を目的として移行する際、PostgreSQLおよびMySQLに対応しているため、AWSへの移行が容易である。ユーザーはサービスの要件に合わせてリージョンを跨ぐ大規模な高可用な設計や高スループット低レイテンシーを実現するための負荷分散など様々な構成にすることができる。
次から順を追って詳細な解説に入っていく。

# 目次<!-- omit in toc -->
- [Amazon Auroraとは](#amazon-auroraとは)
- [主な特徴](#主な特徴)
- [その他の特徴](#その他の特徴)
- [ユースケース](#ユースケース)
  - [小規模な構成の場合](#小規模な構成の場合)
  - [大規模な構成の場合(Amazon Aurora Global Database)](#大規模な構成の場合amazon-aurora-global-database)
- [Amazon RDSの暗号化](#amazon-rdsの暗号化)
- [データベースファミリー](#データベースファミリー)
- [まとめ](#まとめ)

# Amazon Auroraとは
- Amazonのフルマネージドサービス
    保守、運用監視、セキュリティ対策などはAmazonがなんでもやってくれるってこと
- AWSにおけるAmazon Auroraに位置づけ
    <table>
      <thead>
        <tr>
          <th>データベースファミリー</th>
          <th>説明</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Amazon RDS</td>
          <td>いくつかのRDBをサポートしている標準的なやつ<br>Auroraはここに含まれる</td>
        </tr>
        <tr>
          <td>Amazon Redshift</td>
          <td>データウェアハウス、機械学習や分析に使われる</td>
        </tr>
        <tr>
          <td>Amazon DynamoDB</td>
          <td>Key-value型のNoSQL</td>
        </tr>
        <tr>
          <td>Amazon ElastiCache</td>
          <td>超高速なアクセスが可能のインメモリ型の<br>キャッシュデータベース</td>
        </tr>
      </tbody>
    </table>
    
- Amazon RDSの一つ
  <table>
  <thead>
    <tr>
      <th>エンジンタイプ</th>
      <th>説明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Amazon Aurora</td>
      <td>MySQL互換とPostgreSQL互換のクラウドネイティブなRDBMS</td>
    </tr>
    <tr>
      <td>MySQL</td>
      <td>オープンソースのRDBMS</td>
    </tr>
    <tr>
      <td>PostgreSQL</td>
      <td>オープンソースのオブジェクトRDB</td>
    </tr>
    <tr>
      <td>MariaDB</td>
      <td>MySQLから派生したオープンソースのRDB</td>
    </tr>
    <tr>
      <td>Oracle</td>
      <td>商用のRDBMS</td>
    </tr>
    <tr>
      <td>SQL Server</td>
      <td>Microsoftの商用のRDBMS</td>
    </tr>
  </tbody>
</table>

- 通常のPostgreSQLとMySQLよりも性能(スループット)が高い
- データベースストレージはデフォルトの汎用SSDとスループットIOPSの２種類を選択できる
- 障害発生時の復旧が早い
    →RPOが1秒以内、RTOが1分以内
  - RPO(Recovery Point Objective)：障害が起きたポイントからどれだけ前の状態を復旧できるか
  - RTO(Recovery Time Objective)：障害が起きてから復旧するまでの時間

# 主な特徴
Auroraクラスタごとに1つのマスタインスタンスを持ち、最大15個のリードレプリカを作成することができる。
<img >
- インスタンス
  - マスタインスタンス：書き込み処理と読み込み処理ができるメインインスタンス
    - 1つのAuroraクラスタに対し一つ
  - リードレプリカ(RR)：読み込み処理専用のインスタンス
    - マスタインスタンスの変更を数秒で非同期に取り込む
    - 1つのAuroraクラスタに対し最大15個の作成が可能
    - マスタインスタンスがダウンした場合、どれか一つのRRがマスタインスタンスに昇格する
- エンドポイント
  - クラスターエンドポイント：マスタインスタンスに繋げる
  - リーダーエンドポイント：RRのどれかにいい感じに分散して繋げる
  - カスタムエンドポイント：ユーザーが決めた特定のRRの範囲に繋げる
  - インスタンスエンドポイント：特定のRRに繋げる

# その他の特徴
- 暗号化
  Amazon RDSでの暗号化は２通りある
  1. データベースインスタンスの生成時に暗号化を有効にする方法
  2. 暗号化されたスナップショットのコピーからデータベースインスタンスを復元する方法

なお暗号化されたデータベースインスタンスの複製やスナップショットはすべて暗号化されたものとなる。

# ユースケース
ここからはどのような利用のされ方があるかという角度から理解を深めていく。

## 小規模な構成の場合
小規模なサービスでは1リージョンに収めることがちょうどよいだろう。
下記の様な構成が考えられる。
![AWSインフラ構成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762025/c9790c60-db0d-05b5-ebbf-09b463b57f31.png)

Auroraクラスタ内にクラスタエンドポイントとリーダーエンドポイントが作成される。これらのエンドポイントは通常Auroraが属するVPC内で利用されるため、簡単のためにEC2インスタンスも同VPCに配置した。
Auroraはほとんどの場合、重要なデータを扱うためセキュリティ対策として、Private Subnetにプライマリインスタンス(Primary)とリードレプリカ(RR)を配置し、セキュリティグループを設ける。

## 大規模な構成の場合(Amazon Aurora Global Database)
Auroraはリージョンを跨ってインスタンスを配置することができる
これにより高スループットと低レイテンシーを実現し、耐災害性も高い。
PrimaryRegionがダウンした時でも自動的にSecondaryRegionのリードレプリカの一つがマスタインスタンスに昇格し災害によるビジネスへの影響が少なくなるようになっている。
![AWSインフラ構成図-Aurora大規模インフラ構成図_1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762025/ac3372fd-9cd9-c6b6-2fd1-6cbfe036394e.png)

# まとめ
学習と並行してこういったノウハウ的なものを残すのは学習の進捗は遅くなるが
記憶に定着しやすいし自分がわかっていない点も洗い出せるのでこれからも残していくとしよう。