AWSソリューションアーキテクトアソシエイト #3(データベース編)
はじめに
データベースに関するサービスは、実務をやっている人じゃないとなかなかイメージしづらい領域かなと思う。
単語の意味とか書いてある内容は理解できるものの、頭の中でイメージがしづらかったと言うのが感想
AWSのデータベースサービスの種類
大きくは以下の2つがある。
・リレーショナルデータベース型
・NoSQL型
リレーショナルデータベース
Aurora(オーロラ)
RDS
Redshift
NoSQL型
DynamoDB
DocumentDB
Neptune
Keyspace
MemoryDB for Redis
上記以外にキャッシュを強化するためのサービスとして
ElastiCacheと言うものがある
今回はAurora・RDS・DynamoDBに関してまとめる
リレーショナルデータベース
Aurora
Amazon AuroraはAWSが開発したリレーショナルデータベース。
MySQLとPostgreSQLとの互換性を持ったサービスとなっている。
(当然フルマネージド)
Auroraはインスタンスを作成すると、DBクラスタが作成され、1つ以上のDBインスタンスと、DBインスタンスに紐づくデータストレージが作成される。
データストレージ(クラスタボリューム)は、1つのリージョンのうち、3つのAZに分散して作成され、自動的に同期処理がなされる。
最大128TBまで拡張される。
マルチAZオプションは無い代わりに、障害発生時は参照専用のインスタンスがプライマリインスタンスに代わることで耐障害性を高めている
RDS
MySQL ,MariaDB ,PostgreDB ,Oracle,Microsoft SQL Serverなどオンプレミスでも使い慣れたデータベースエンジンから好きなものを選べるAWSのマネージドつきサービス。
(EC2にインストールして上記DBを使うことも可能だが、その場合はマネージドがついていないため、パッチ適用・バージョンアップなどは適正にユーザー側が管理しないといけない)
デメリットとして、各データベースエンジンに置いて、RDSでは使用できない機能があるため、サービス仕様をよく確認しておく必要がある。
RDSで使えるストレージタイプ
RDSではストレージにEBSを使うことになる。
EBSのうち、”汎用SSD”・”プロビジョンドIOPS SSD”・”マグネティック”がある。よほどとことがなければ”マグネティック”は使わない(レガシー機能)
基本は汎用SSDで十分だが、高いIOPSが求められる場面ではプロビジョンドIOPSを選択する。
マルチAZ構成
1リージョンのうち2つのAZにDBインスタンスを作成し、片方をスタンバイ状態としてレプリケーションも貼ってくれるもの。(ダウンタイムが小さくなるよ)
書き込み速度が遅くなるため、開発の時と比べてパフォーマンスが落ちるなんてことがよくあるそう。
開発時点でもマルチAZで構築すると本番との違いが小さくなる(ただしコストは上がる)
リードレプリカ
読み取り専用のインスタンスを作成する。これによりマスターインスタンスの負荷を低減させれらる。リードレプリカは非同期なので、微妙に差分が出ちゃうかも。
バックアップ/リストア
・自動バックアップ
1日1回バックアップとる。ただし、35日間しか残りません。
シングル構成だと短時間の中断時間が発生するよ
・手動バックアップ
任意のタイミングでバックアップ取得できる。1リージョンあたり100個まで取得可能。
・データのリストア
取得したバックアップから任意のものを選択して簡単にリストアできる。
・ポイントインタイムリカバリー
直近5分から35日前までの任意のタイミングのRDSを新規に作成できる。ただし自動バックアップで取得したスナップショットからなので、自動バックアップがオンにってないと使えないよ〜
セキュリティ
・ネットワークセキュリティ
VPCに対応しているため、EC2同様セキュリティグループによる通信要件の制限が可能
EC2などからRDSへの通信もSSLによる暗号化に対応
・データ暗号化
オプションを有効にすると、ストレージ・バックアップ・ログ全てを暗号化する。途中で変更できない。
NoSQL
DynamoDB
概要
AWSが提供するマネージドNoSQLデータベース
拡張性に優れたKey-Value型のデータベース。以下のようなアプリケーション用データベースとして利用するとメリットがある。
・高い信頼性と拡張性を必要とするシステム
・スループットが増減するようなピーク帯のあるシステム
・大量のデータを蓄積して高速な検索が可能なシステム
・広告やゲームなどのユーザー行動履歴を管理するシステム
・Webアプリケーションの永続的セッションデータベース
特徴
高可用性設計
単一障害点(SPOF)を持たないサービス。自動的に3つのAZにデータが保存される。スループットキャパシティ
読み取りと書き込みに必要なスループットを設定できる。データパーティショニング
データをパーティションと言う単位で分散保存する。1つのパーティションに対して保存できる容量やスループットキャパシティが決まっている。
最適化されるようパーティションを自動的に拡張する。プライマリーキーとインデックス
プライマリーキーは”パーティションキー”単独のものと、”パーティションキー+ソートキー”の組み合わせで構成されるものの2種類がある。
プライマリキーだけで高速な検索要件を満たせない場合は”セカンダリインデックス”を作成して対応する
(ただし、セカンダリインデックスははKey-Value型のデータベースの使い方の本質ではないため、RDBへの移行も含めた検討も考えると良い)期限切れデータの自動メンテナンス
有効時間を設定できる。有効時間を過ぎたデータは自動的に削除される。即時削除ではなく最大48時間以内。自動削除はスループットキャパシティユニットを消費しないため過去データのメンテナンスを効率的に実施できる。DynamoDB Stream
直近24時間以内の追加・更新・削除の変更履歴を保持する機能DynamoDB Accelerator(DAX)
DynamoDBの前段にキャッシュクラスタを構成する拡張サービス。性能向上とRCUの確保を抑えるためコスト削減にも貢献する。
終わりに
そもそもなぜクラウドを使うのか
オンプレと比較して何が優れているのか
どういう時に使われているのか
上記のような点をしっかり理解しておかないと、普段の提案活動で使えない知識になってしまうと改めて再認識した。
この辺も並行してインプットを続ける。