AWS Cloud Practionerへの道 #4 ストレージとデータベース

## データベースとストレージ

### Amazon EBS (Elastic Block Store)

EC2はストレージが必要。
ブロックレベルストレージ。HDDやSSDはブロックレベルストレージとして使われ、更新される部分だけが更新される。EC2はインスタンスストアボリュームが接続されている。インスタンスストアボリュームは揮発性が高いボリュームで、EC2が停止したらデータは消えてしまう一時的なもの。なのでEC2はAmazon Elastic Block Store（EBS）を使う。EBSはEC2を停止させてもデータが保持される。EBSはSnapshotという形でバックアップを作り、そこからデータのリストアができる。

Snapshotは変更があった差分のみ追加でバックアップするため、経済的。

### Amazon S3 (Simple Storage Service)

シンプルなストレージサービス（まんまやんけ）。

- データはオブジェクトとしてバケット（バケツ）に保存される
- 最大5TBのファイルまで対応
- オブジェクトのバージョニングが出来る
- 複数のバケットを作ることが出来る
- バケットは以下を一例とした特徴あるクラスから１つ選択する
    - よく使うデータと、バックアップ向けのデータとワケたりできる

#### S3 Standard

- 99.999999999%の可用性
- 静的ファイルホスティングができる

#### S3 Standard-Infrequent Access (S3 Standard-IA)

- アクセスの機械は少ないが、アクセスされた時に迅速に提供できると良い
- 保存は安い、取り出しは高い
- - ディザスターリカバリーなど

#### S3 Glacier

- Vaultにデータをアーカイブする
- 保存は安い、取り出しは時間がかかり高い
- Write once/read manyのようなポリシーの適用も使える

#### S3 Lifecycle Policy

ライフサイクルポリシーを設定し、StandardやStandard-IAやGlacierに条件に応じてそれぞれ自動でデータを移動さ焦ることが出来る。これにより、不要なデータをコストの低いGlacierに格納することなども可能。


### EBS vs S3

- 大量の画像を見てほしいアルバムのようなサービス
    - S3
        - コストが安い
        - 可用性が高い
- 80GBのファイルを編集する必要がある
    - EBS
        - Objectとして扱う、更新を加えたらまるごとアップロードし直す必要があるがブロックストレージではブロック単位での更新で済む


### Amazon EFS (Elastic File System)

- EBSはAvailability Zone単位のEC2にひもづくボリューム
- スケールしない
- EFSはLinux File System
- Regional resoures
- スケールも自動でする

### Amazon RDS (Relational Database Service)

RDBMS。関係データベース管理システム。
Amazon Aurora, MySQL, MariaDB, PostgreSQL, Oracle, Microsoft SQL Serverなどに対応。
リフト＆シフトのために移行サービスを使うことも出来る。

- 自動パッチ
- バックアップ
- フェイルオーバー
- ディザスターリカバリー

### Amazon Aurora

MySQLとPostgreSQLに互換性を持つAWSのRDB。ただ、それらよりも早い。

### Amazon Dynamo DB

スケールを必要ないノンリレーショナルなドキュメントDB。
データにフレキシビリティがあるが、SQLはかけない。
- サーバーレス
- アイテムはアトリビュート（属性）を持つ
- スケールについて気にする必要がない

### Amazon RDS vs Dynamo DB

- RDS
    - 高い可用性とリカバリー性
    - データのオーナーシップ
    - スキーマのオーナーシップ（カスタマイズ）
    - ネットワークのコントロール
- Amazon Dynamo DB
    - Key-value
    - 大きなスループット
    - ペタバイトサイズのポテンシャル
    - グラニュラーナAPIアクセス

一つのテーブルでなんとかなるようなデータはAmazon Dynamo DB。オーバーヘッドがすくなくJOINなどの大きな処理が不要。ただのルックアップになるような作りならDynamoDBで十分。

### Amazon Redshift

データウェアハウスのサービス。データアナリティクス（解析）。データコレクションが継続しているRDBに対してのデータアナリティクスをかけると、負荷がかかったり必要なデータを集めるのに処理が難しかったり。そういう時にデータアナリティクスをするために作られたデータウェアハウスを使うことが推奨され、Amazon Redshiftはそのためのもの。

データウェアハウス as a Service。ペタバイト級のデータでも使える。非構造化されたデータでも対応できる。いわゆるRDBに比べて10倍くらいの性能。シングルのAPIコールで利用可能。

### AWS Database Migration Service

すでに利用中のオンプレミスやクラウドのデータベースからAWSへ移行するためのデータベース。マイグレーション中でもコピー元のDBは起動可能。ダウンタイムは最小化されている。移行元と移行先のDBは必ずしも同じタイプである必要がない。

同じタイプはhomogenousと呼ばれる。MySQLからAmazon　Aurora、OracleからAmazon RDS for Oracle、みたいなタイプ。異なるタイプはheterogenous migration。その場合、コンバートが必要。テストマイグレーションなどにもMigrationServiceは利用可能。コンソリデーション（複数DBの統合）や、コンティニュアスレプリケーションも使える。

### その他のデータベースサービス

正しいデータベースを選択することが大事。すべてにフィットするデータベースはないので、AWSは異なるタイプのデータベースを提供している。DynamoDBやAurora。

### Amazon DocumentDB

MongoDBサポート。Dynamo DBはフルマネージドだがこちらは多少自由度あり。
スキーマフリー。

### [Amazon Neptune](https://aws.amazon.com/neptune)

グラフデータベース。
SNSやレコメンデーション、ナレッジグラフに使える。

### [Amazon Managed Blockchain](https://aws.amazon.com/managed-blockchain)

ブロックチェーン

### [Amazon Quantum Ledger Database (Amazon QLDB)](https://aws.amazon.com/qldb)

アプリケーションデータに加えられたすべての変更の完全な履歴を確認することができる。

### [Amazon Elastic Cache](https://aws.amazon.com/elasticache)

データベースの上にキャッシュ層を追加して、一般的なリクエストの読み取り時間の改善を支援するサービス。
RedisとMemcachedの2種類のデータストアをサポート。

### Amazon Dynamo DB Accelerator (DAX)

DyanmoDBのインメモリキャッシュ。ミリ秒マイクロ秒単位での改善が必要な時に。