AWS Aurora,Redshift,DynamoDB,ElastiCache


#Auroa
**MySQLと2.5～5倍の性能を商用データベースの10分の1の価格で提供する高性能・低コストDB**

不規則な負荷に自動でスケーリングすることが可能なRDBです。DBインスタンスクラスのサイズを指定せずにデータベースエンドポイントを作成し、データベースエンドポイントがプロキシフリートに接続されます。このプロキシフリートでは、ワークロードをルーティングする先のリソースのフリートがオートスケーリングされます。プロキシフリートを使用すると、最小と最大のキャパシティー仕様に基づいて Aurora Serverless がリソースを自動的にスケールすることができます。

###Auroraの特徴
　ー高い並列処理によるストレージアクセスによってクエリを高速処理することが可能
　ーAuroraは大量の書き込みや読み込みを同時に扱うことができる
　ーデータベースの集約やスループット向上が見込まれる
　ー全てが５倍高速わけではなく、適用する領域を見つけて利用する
　ーMySQLかPostgreSQLとの互換性がある

**耐障害性性と自己回復性**
　ー３つのAZに２つのコピーを設置可能で合計６つのコピーを保持可能
　ー過去のデータがそのままS3に継続的にバックアップ
　ーリストアも差分適用がなく高速
　ーどんなタイミングでも安定したリストア時間
　ー９９.９９％の高可用性と高耐久性

**スケーラビリティ**
　ー１０Gbから６４GBを提供するSSD
　ーAuto Scalingなどのクラウド退くぞのスケーラブルが可能
　ー最大１５台のリードレプリカを使用して高速読み取り可能


###・別リージョンへの障害回復機能
AuroraはプライマリーとなるDBクラスターが設置されているリージョンとは異なるリージョンにリードレプリカを作成することができます。 この方法を採用すると、障害回復機能を向上させて、読み取り操作をユーザーに近いリージョンに拡張しつつ、元のリージョンから別のリージョンへの移行を容易にすることができます。

###・エンドポイント
**・クラスタエンドポイント**
プライマリインスタンスに接続するためのエンドポイント。データベースの全ての操作（参照・作成・更新・削除・定義変更）が可能。

**・読み取りエンドポイント**
レプリカインスタンスに接続するエンドポイント。読み取りエンドポイント経由で接続した場合、データベースに参照のみしかできない。

**・インスタンスエンドポイント**
クラスタを構成するDBインスタンスに接続するエンドポイント。

**・カスタムエンドポイント**
クラスタを構成するインスタンスのうち、任意のインスタンスをグルーピングしてアクセスする場合に使用する。



#Redshift

AWSが提供するデータウェアハウス向けのデータベースサービス。大量のデータから意思決定に役立つ情報を見つけ出すために必要な環境を素早く安価に構成できる。主に大量データを高速に主計・分析する必要があるワークロードに活用する。高速、無制限のスケール、データレイクを拡張、1/10分のコスト。

スケーリングは、ノードの追加かクラスタの追加が可能になる。
**マルチAZ構成はできない。Redshift はシングル AZ 配置のみをサポートしています。**

**業務解析システム用のデータベースにはRedshiftが最適です。**
Redshiftは大量データの保存や並列処理によるパフォーマンス向上が可能であり、要件を満たすことができます。Redshiftはクラウド内で完全に管理されたペタバイト規模のリレーショナルデータベース型のデータウェアハウスサービスです。 Redshiftは数百ギガバイトのデータからペタバイト以上に拡張できます。

##Redshiftの構成
**・クラスター**
１つのRedshiftを構成する複数のノードのまとまり。クラスターの中に下記３つがある。

**・リーダーノード**
クラスタに１つ。クエリの解析や実行プランの作成を行います。コンピュートノードの数に応じて最適な分散処理を行う。

**・コンピュートノード**
リーダーノードからの実行クエリを処理する。

**・ノードスライス**
分散処理をする最小単位。コンピュートノードの中でさらにリソースを分割してスライスという単位を構成する。

・バックアップ・・・S3への自動・手動スナップショット
・リストア・・・スナップショットから復元
・監視・・・コンソールやCLI経由で状況確認
・アクセス監査・・・監査ログをS3上に自動取得
・バージョンアップグレード・・・定期的な自動アップグレード
・キャパシティ管理・・・厳密な管理を必ずしも必要ではない


##Redshiftの特徴

**・列指向型データベース**
集計処理に使用されるデータをまとめて管理し、ストレージからのデータ取得を効率化します。ボトルネック要因は、データI/Oになる。

**・データ圧縮**
列ごとに圧縮エンコード方式が指定可能名ため、データの性質にあった方式を選択でき効率化する。列指向型データベースと組み合わせることで、I/Oを軽減することが期待できる。

**・ゾーンマップ**
ブロック内に格納されているデータの最小値と最大値をメモリに保存する仕組みです。

**・柔軟な拡張性　柔軟な拡張性を行えるのは２つある**
ーMPP
　１回に集計処理を複数のノードに分散して実行する仕組み。

ーシェアードナッシング
　各ノードがディスクを共有せず、ノードとディスクセットで拡張する仕組み。

##Redshiftへデータを移動して分析
**・S3**
S3内部のデータ解析を直接実行することが可能
Redshift Spectrumを使用する。

**・Kinesis**
Kinesis data Firehoseを利用してストリーミングデータの格納先としてRedshiftを指定してデータを保存を行い、分析することが可能。

**・RDS**
Data PipelineやDMSを利用してデータ移行を可能

**・DynamoDB**
DynamoDBからRedshiftにデータコピーを実行可能

**・EMR**
EMRからRedshiftにデータコピーを実行可能

##クロスリージョンスナップショット
Redshiftクラスターのクロスリージョンスナップショットすることで、**プライマリクラスターがダウンした場合に備えて即座に利用できる構成を維持することができます**。クラスターのスナップショットを自動的に別のリージョンにコピーするようにRedshift を設定できます。

**Redshiftではスナップショット用に無料ストレージを提供してますが、ストレージ容量が超過すると課金が発生します。**スナップショットの空き容量が上限に達すると課金される仕組みとなっています。 このため、**自動スナップショットを保存し、保存期間日数を見直すことで、不要になった手動スナップショットを削除する必要があります。**
リザーブドインスタンスのみ使用可能です。

##Redshift Spectrumを使うことで、
**直接にS3データに対して高度なビッグデータ分析を実行.
S3に保存されたファイルをRedshiftにロードしたり特殊な準備をすることなく、高度なクエリを実行することが可能になります。**Redshift Spectrumは主にビッグデータをS3に蓄積して解析するためのビッグデータソリューションとして利用することを目的としています。

##Redshiftは拡張VPCルーティングを使用すると、
**Redshift はクラスターとデータリポジトリ間のすべての COPY と UNLOAD トラフィックがVPC を通るよう強制します。**拡張された VPC ルーティングを使用することで、 VPCセキュリティグループ、ネットワークACL、VPC エンドポイント、VPC エンドポイントポリシー、インターネットゲートウェイ、ドメインネームシステム (DNS) サーバーなどのスタンダード VPC 機能を使用することができます。
これらの機能を使用して、Redshift クラスターと他のリソースの間のデータフローを詳細に管理します。拡張 VPC ルーティングを使用して VPC からトラフィックをルーティングする場合には、VPC フローログを使って COPY と UNLOAD トラフィックを監視することもできます。


##暗号化 KMSかHSM
 Redshift は暗号化キーの階層を使用してデータベースを暗号化します。KMSまたHSM のいずれかを使用して、この階層の最上位の暗号化キーを管理できます。Redshift で暗号化に使用するプロセスはキーの管理方法によって異なります。



#DynamoDB

マネージドNoSQLデータベースサービスで、拡張に優れたKeyーValue型のデータベースを提供する。**DynamoDBとElastiCacheはリレーショナルDB向けのSQLクエリ処理は実行できない。**

**DynamoDBはJSON形式のファイルの保存が可能であり、
トラフィック量が多くても低レイテンシーを保つNoSQL型のデータベースサービスです。**

高可用性設計で単一障害点を持たない構成となっている。
**DynamoDB内のデータは自動的に３つのAZに保存される仕組みになっている。**

主キーでインデックス付けされた構造化データを格納することができます。それにより、1バイトから最大400KBまでの範囲の項目への低レイテンシーの読み取りおよび書き込みアクセスが可能であり、メタデータの保存に最適です。



####・DynamoDBの整合性
**・Write**
少なくとも２つのAZでの書き込み完了が確認取れた時点で完了。

**・Read**
**ー結果整合性モデル**
デフォルト。最新の書き込み結果が即読み取り処理に反映されない可能性がある。

**ー強い整合性モデル**
オプション。GetItem/Query/Scanでは強い整合性のある読み込みオプションが指定可能。


###・テーブル設計　テーブル単位から利用が開始され、テーブル→項目→属性と設計する
-テーブル　
テーブルはデータのコレクションのこと。他のDBと同様にテーブル単位で保存する。

-項目　
各テーブルの中に項目を作ってデータを作成する。

-属性　
各項目は１つ以上の属性で構成される。

パーティショニング・・・大量データを高速処理するためにパーティショニングによる分散処理を実施している。

##DynamoDB Streams

**DynamoDBテーブルに保村された項目の追加・変更・削除の発生時の履歴をキャプチャできる機能。**データ更新をトリガーとしたアプリケーション機能やレプリケーションに活用できる。

**ーデータの保存**
過去２４時間以内のデータ変更の履歴を保存し、24時間を経過すると消去される。
データ容量はマネージド型で自動的に管理。

**ーデータ保存の順番**
操作が実施された順番に応じてデータはシリアライズされる。
特定のハッシュキーに基づいた変更は正しい順番で保存されるが、ハッシュキーは異なる場合は受信した順番が前後される可能性がある。

例えば、ユーザーがデータを DynamoDB テーブルに追加した際に、このイベントを起点にして、データ管理者にメールを送信してDynamoDBの変更を通知するといった機能を作ることができます。DynamoDB ストリーム はDynamoDB テーブル内の項目レベルの変更の時系列シーケンスをキャプチャし、この情報を最大 24 時間ログに保存します。
** DynamoDBへのデータ登録後、自動でLambda関数を起動してメタデータを登録することが望ましい構成です。そのためには、DynamoDBストリームという仕組みを使うことで、DynamoDBテーブルへのデータ登録をトリガーにしてLambda関数を起動することができます。また、Lambda関数は最大512MBまでのデータ容量を扱うことができます。**

##DynamoDB Accelerator （DAX）
DynamoDB Accelerator(DAX) を有効化することで、
DynamoDBテーブルはミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。DAXはキャッシュを利用しているため特定のデータへの処理が高い場合などに中長期的な性能向上のために対策としては正しいです。しかしながら、キャッシュDBは高コストである


##DynamoDBにはテーブルで読み込みおよび書き込みを処理するための読み込み/書き込みキャパシティーモードが 2つあります。
読み取り/書き込みキャパシティーモードは、読み取りおよび書き込みスループットの課金方法と容量の管理方法を制御します。テーブルを作成するときに設定でき、後で変更することもできます。
**・オンデマンド**
**・プロビジョニング済み (デフォルト、無料利用枠の対象)**
プロビジョニング済みを選択すると、予め利用者が予測される読み書きの回数を指定しその必要な分の性能が確保されます。この場合、確保された性能に対して課金されます。

##DynamoDBのAuto Scalingを導入
テーブルとグローバルセカンダリインデックス（GSI）の容量増加を自動化できます。DynamoDB Auto Scalingはテーブルとインデックスを監視して、アプリケーショントラフィックの変化に応じて自動的にスループットを調整します。 これにより一時的な負荷増加に対して、DynamoDBテーブル処理パフォーマンスの管理が容易になり、アプリケーションの可用性を最大化しつつ、DynamoDBのコストを削減することができます。


##DynamoDBはリアルタイムのデータ集計処理に使用できる
AppSyncを使用して、DynamoDBのデータをリアルタイムで最新の状態に保つコラボレーションアプリを簡単に構築できます。  これにより、アプリケーションはDynamoDBのデータにアクセスしたり、EC２インスタンスやAWS Lambda関数がデータ処理を実行するなどの機能を実装することができます

DynamoDB は1 日に 10 兆件以上のリクエストを処理することができ、毎秒 2,000 万件を超えるリクエスト処理が可能なNoSQL型のデータベースです。DynamoDB はキーバリュー型の連続した単純なデータ形式を高速で処理にするのに適しており、IoTデータやセッションデータ管理などに用いられます。また、DynamoDBのTime-to-Live（TTL）メカニズムにより、アプリケーションのWebセッションを簡単に管理できます。


##AWS Backup
Storage Gateway を使用して、オンプレミスおよび AWS サービス全体のデータのバックアップの一元化と自動化を簡単に実行できる、完全マネージド型のバックアップサービスです。バックアップポリシーを一元的に設定し、EBS ボリューム、RDS データベース、DynamoDB テーブル、EFS ファイルシステム、Storage Gateway ボリュームなどの AWS リソースのバックアップアクティビティを監視できます。


##EMR
Apache HadoopやApache SparkなどのビッグデータフレームワークをAWS上で実行して大量のデータを処理および分析プロセスを構築できるプラットフォームです。 Amazon EMRを使用して、Amazon S3やAmazon DynamoDBなどの他のAWSデータストアやデータベースとの間で大量のデータを変換や解析することができます。よって、S3にある大量のログファイルを処理して、分析するのに最適なサービスです。

##Amazon Kinesis Data Firehose 
ストリーミングデータをデータレイクやデータストア、分析ツールに配信するサービスです。ストリーミングデータをキャプチャして変換しつつ、S3、Redshift、Elasticsearch Serviceにロードします。**DynamoDBに配信することはできません**



#ElastiCache
AWSが提供するインメモリ型データベースサービスです。
頻繁にアクセスされるデータを保持するのに向いている
高スループットかつ低レイテンシーなインメモリデータストアからデータを取得して、大量のデータを扱うアプリケーションを構築したり、既存のアプリケーションのパフォーマンスを改善したりすることが可能です。
**DynamoDBとElastiCacheはリレーショナルDB向けのSQLクエリ処理は実行できない**

２つの構成がある
**・Memcached**
シンプルなデータ構造で、データ処理パフォーマンス向上に特化したシステム。永続性機能はないため、メンテナンスや障害による再起動が行われた場合、データは消えてしまう。マルチスレッドで動作するインメモ リキャッシュDB。

**・Redis**
Memcachedよりも多くのデータを使用でき、キャッシュ用途だけではなくメッセージブローカーやキューを構成する要素としても利用される。ノード間のレプリケーション機能やデータ永続性機能といった可用性も考慮された機能が実装されている。シングルスレッドで動作するインメ モリキャッシュDBで全てのデータ操 作は排他的。

**■Redisの特徴は以下の通りです。 **
・複雑なデータ型を設定できる。
・インメモリデータセットのソートまたはランク付けが可能である。
・データをリードレプリカにレプリケートできる。
・pub/sub機能を提供する。イベントを起こす/イベント処理を行う
・自動的なフェイルオーバーができる
・キーストアの永続性が必要である。
・バックアップと復元の機能がある。
・複数のデータベースをサポートしている。

**■Memcachedの特徴は以下の通りです。**
・シンプルなデータ型である。
・複数のコアまたはスレッドを持つ大きなノードを実行する。
・システムでの需要の増減に応じてノードを追加または削除するスケールアウトおよびスケールイン機能が利用できる。
・データベースなどのオブジェクトをキャッシュできる。
・キーストアの永続性はない
・バックアップと復元の機能がない。
・複数のデータベースを利用できない

##RDSの読み取りキャパシティを向上
ElastiCacheをRDSの前面に配置することで、RDSの読取処理が多いデータをキャッシュとして保持して、インメモリ上で高速処理することができます。



#リザーブドインスタンスの対応サービス
AWSサービスの中には1年~3年などの一定期間利用を予約することを前提に割引価格で購入可能になるオプションがあります。主なリザーブド購入オプションは以下のようなものがあります。
・EC2リザーブドインスタンス
・RDSリザーブドインスタンス
・ElastiCacheリザーブドノード
・DynamoDBリザーブドキャパシティ
・Redshiftリザーブドノード