AWS Cloud Practitioner 学習記録５（２／２）

:::note info
AWS Skill Builder における下記コンテンツの学習記録（ポイントとメモ）です
AWS Cloud Practitioner Essentials (Japanese) (日本語実写版)
:::

AWS Cloud Practitioner 学習記録５（１／２）からのつづき

# モジュール５：ストレージとデータベース

### Amazon Relational Database Service (Amazon RDS)
##### リレーショナルデータベース（RDB）
表形式でデータの関連付けができるデータベースのこと
SQL でデータを保存したりクエリを実行したりする
RDB について解説し始めると永遠に終わらないのでここでは割愛

##### Amazon Relational Database Service (Amazon RDS)
AWS でリレーショナルデータベースを実行できるようにするサービス
例によってマネージドサービスでありハードウェアプロビジョニング、DB のセットアップ、パッチ適用、バックアップなどの運用を AWS に任せることができる
ほかの AWS リソースと組み合わせることで真価を発揮する
Amazon RDS にはセキュリティオプションが用意されており、保管中／転送中の暗号化（データ保護）なども行うことができる

##### Amazon RDS データベースエンジン
RDS がサポートするエンジンは以下
+ Amazon Aurora
+ PostgreSQL
+ MySQL
+ MariaDB
+ Oracle Database
+ Microsoft SQL Server

##### Amazon Aurora
~~見慣れないエンジン~~ AWS が提供するエンタープライズ規模の RDB サービスである
MySQL および PostgreSQL との互換性があり、標準の MySQL より最大5倍、標準の PostgreSQL より最大3倍高速、とのこと
AWS に適応した RDB のため信頼性・可用性が高く、ほかの AWS リソースとも親和性が高い
データは、3つの AZ へ 2つのコピーが書き込まれることで6つにレプリケートされ、
自動的に Amazon S3 へバックアップもされるようになっており、高い信頼性と可用性を実現している

### Amazon DynamoDB

##### 非リレーショナルデータベース
リレーショナルデータベースは、表形式でデータが構造化されていた
それ以外のデータ構造を持つデータベースは、**NoSQLデータベース**とも呼ばれる非リレーショナルデータベースである
非リレーショナルなデータ構造のアプローチの1つにkey-valueペア（Key Value Store:KVS モデルとも呼ばれる）があり、以下のようなイメージでデータを保持できる

|key（項目）|value（属性）|
|-|-|
|1|名前：Qiita<br>生年月日：2011年9月16日|
|2|名前：Amazon<br>住所：ワシントン州シアトル|

key-valueデータベースの特徴は、項目には属性をいつでも追加／削除でき、それぞれ項目で同じ属性を持つ必要がないこと
NoSQL データベースは RDB と比較して単純で柔軟なスキーマ、異なるトランザクション特性[^1]の取り扱いをすることで、
圧倒的なレスポンスの速さとスケーラビリティを実現している
いっぽうで検索や分析といった複雑な条件のクエリは苦手

##### Amazon DynamoDB
~~見慣れないエンジンその2~~ AWS が提供する key-value データベースサービスである
1桁ミリ秒のパフォーマンスを実現するデータベースサービスとうたわれている
サーバーレスなので、サーバ管理不要なサービスであり、容量の変化に応じて自動的にスケーリングしながらパフォーマンスは維持してくれる

### Amazon Redshift
##### Amazon Redshift
AWS で提供されるビッグデータを分析するクラウドデータウェアハウジングサービス
データウェアハウス（DWH）には様々なソースのデータを収集し、データ全体の関係や傾向を理解するのに役立つ
＃Redshift の章が作られているが、説明はあっさりしているので名前を憶えておけばよい程度？

### AWS Database Migration Service
AWS へデータベースを移行（Migration）する際に利用できるサービス
代表的なケースは以下のように、同種または異種のデータベース間での移行
+ ソース（オンプレミスなど）と ターゲット（AWSなど） で同じ種類のデータベースの移行
    + ターゲット側にソースと同じスキーマを作ってそのまま移行する
+ ソースとターゲットで異なるデータベースの移行
    + ソースとターゲット間のスキーマ変換を行ってから移行する

##### AWS Database Migration Service (DMS)
リレーショナルデータベース、非リレーショナルデータベース、その他タイプのデータストアを移行できるサービス
利用できる要件は、ソースまたはターゲットエンドポイントのどちらかが AWS サービスであること（AWS のサービスなので当然である）
ソースデータベースは利用可能な状態に保たれ、そのデータベースを利用しているアプリケーションの中断を最小限に抑える

そのほかのユースケースとして以下のようなものもある
+ 開発／テスト環境でのデータベース移行
    + 本番環境に影響をあたえることなくテストできる環境をつくる
+ データベースの統合
    + 複数のデータベースを１つにまとめる
+ 継続的レプリケーション
    + 1回限りの移行ではなく継続的に変更をコピーする

### その他のデータベースサービス
残念ながら万能なデータベースソリューションというものはない
ここまで出てきた RDB や NoSQL もそれぞれ長所と短所があり適材適所なエンジンを選択する必要がある
AWS でその他に利用できるデータベースサービスは以下のようなものがあることを覚えておく（今後もきっと増えるし、より洗練されていく）

+ Amazon DocumentDB
    + ドキュメントデータベース（MongoDB 互換）
    + コンテンツ管理システム（Contents Management System:CMS）やユーザプロファイル設定に対応するJSON データ管理のためのサービス
+ Amazon Neptune
    + グラフデータベース
    + ソーシャルネットワーキングでのユーザ同士の繋がりやレコメンデーションエンジン、不正検出などのニーズに対応するサービス
+ Amazon Quantum Ledger Database (Amazon QLDB)
    + 台帳データベース
    + イミュータブルで暗号化された、検証可能な変更履歴の記録
    + 取引履歴といった重要記録の保存や追跡ニーズに対応するサービス
+ Amazon Managed Blockchain
    + 分散台帳データベース
    + Hyperledger Fabric か Ethereum フレームワークをサポート[^2]
+ Amazon ElastiCache
    + インメモリデータストア
    + ミリ秒未満の応答時間が必要とされるようなリアルタイム処理が求められるアプリケーションや、データベースなどのキャッシュとして利用するサービス
    + Redis か Memcached フレームワークをサポート[^3]
+ Amazon DynamoDB Accelerator (DAX)
    + Amazon DynamoDB 用に構築されたキャッシュサービス
    + DynamoDB 自体もミリ秒クラスのレイテンシーを発揮するが、さらに秒間100万単位のリクエストの応答時間にも対応するためのキャッシュ

#
データベースも用途に応じた多種のエンジン・サービスがあり覚えるのに苦労しますね
後半の用語だけ登場するようなサービスはなかなか頭に入ってきません（私の場合 Neptune とか何回見ても忘れる）

[^1]: 一般的に RDB は ACID特性、NoSQL は BASE特性 に寄った設計になっていることが多い

[^2]: [Amazon Managed Blockchain](https://aws.amazon.com/jp/managed-blockchain/ "Amazon Managed Blockchain")

[^3]: [Redis と Memcached の比較](https://aws.amazon.com/jp/elasticache/redis-vs-memcached/ "Redis と Memcached の比較")